7-6ren">
gpt4 book ai didi

android - 为 Android 应用程序签署 REST 请求

转载 作者:太空狗 更新时间:2023-10-29 14:17:06 24 4
gpt4 key购买 nike

我为用户相互竞争的应用程序设计 REST API 服务。当然,主要问题之一是作弊攻击保护。

例如,应用发送此请求以为此方案添加新分数:

HTTP PUT /score
"value" => 72
"access_token" => XXXXXXX

然后恶意分子用修改后的值发出相同的请求:

HTTP PUT /score
"value" => 9000
"access_token" => XXXXXXX

所以,这就是漏洞。解决方案是以预定模式在签名查询中:

sig = hashF(params + salt)

其中盐是 client_secret。但对于 Android,我可以反编译应用程序并复制 client_secret。我可以将 client_secret 移动到 native 代码,但它仍然是漏洞 - 任何人都可以使用我的 native 库或反编译它。

我想使用我的应用程序证书的指纹。它可以在代码中使用。像这样:

PackageInfo info;
try {
info = getContext().getPackageManager().getPackageInfo("com.mypackage", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
return new String(Base64.encode(md.digest(), 0));
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}

令人惊讶的是,使用此代码我可以访问任何应用指纹。那么我可以用什么作为盐呢?

最佳答案

正如您已经指出的那样,由于平台的性质,您无法完全保护任何 secret 。这只是增加保护层。如果您的比赛是随意的,而且没有太多机会,那么您已经拥有的就可以了。

如果您正在做一些涉及真金白银或其他非常有值(value)的事情,使您的应用程序成为目标,您至少需要通过用户身份验证来保护它。例如,用户登录应用程序(对服务器的 SSL 请求)-> 从服务器获取 token -> 使用 token 对请求进行签名。

至少这样您就不会在 APK 中存储发布新乐谱所需的任何内容。但是要正确地做到这一点可能会变得非常复杂,而且它仍然不是完全无懈可击的。真正想要的人仍然可以设计它的工作原理并伪造它。

关于android - 为 Android 应用程序签署 REST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20939157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com