2016-09-30 49 views
0

我想找到方法来确保任何人从其他任何地方调用应用程序的网址,除了应用程序无效,我使用okhttp3。在我的头请求我有一个用户代理,其值是在需要时产生的应用密钥哈希和从未登录使用从无效请求中保护Android应用程序的URL

try { 
    PackageInfo info =  getPackageManager().getPackageInfo("MY PACKAGE NAME",  PackageManager.GET_SIGNATURES); 
    for (android.content.pm.Signature signature : info.signatures) { 
     MessageDigest md = MessageDigest.getInstance("SHA"); 
     md.update(signature.toByteArray()); 
     String sign=Base64.encodeToString(md.digest(), Base64.DEFAULT); 
     Log.e("MY KEY HASH:", sign); 
     // Toast.makeText(getApplicationContext(),sign,  Toast.LENGTH_LONG).show(); 
    } 
} catch (NameNotFoundException e) { 
} catch (NoSuchAlgorithmException e) { 
} 

这样一来,每发送一个请求,我检查是否有用户代理的值匹配我的服务器上的一个(从keystore +签名的apk生成的)在完成任何其他事情之前。最重要的是,数据全部是POST和url都是https。

我的主要担心是有人可以从apk获取提取应用程序密钥哈希值?即使是使用xposed的高级用户,内存转储e.t.c

这是否足够安全?

回答

1

您可以执行的任何内容都将阻止高级用户提取必要的值。这只是一个需要多长时间(几分钟,几小时或几天)的问题。

提出的解决方案非常简单。我假设使用Xposed或中间代理制动,这只是几分钟的问题。

如果您确实需要安全性,则必须使用SSL/TLS证书锁定并使用良好的Android哈丁框架(通常成本有点高)。