通过Android应用中的哈希保护API URL访问

caw*_*caw 10 security hash android http

在我的Android应用程序中,用户可以向数据库提交内容,然后所有其他用户也可以看到该内容.

这个新内容通过GET请求发送到服务器:

http://www.example.org/API.php?newContent=helloWorld
Run Code Online (Sandbox Code Playgroud)

问题是:如果用户发现此URL的外观,他可以轻松地在其浏览器中发送恶意请求并绕过Android应用程序.也许有人可以反编译应用程序并找出URL.

如何保护对此URL的访问并阻止用户直接访问此API?

在应用程序中生成哈希并将其与服务器上API.php文件中生成的哈希进行比较是一个很好的解决方案吗?

无法找到反编译应用程序时如何生成哈希?

非常感谢你提前!

Kur*_*aum 17

因此,真正保护该URL的唯一方法是要求对所有请求进行身份验证.

一种方法是将您的请求更改为POST请求,并使用某种身份验证令牌(一个简单的哈希会发送)与请求一起发送.如果auth令牌不存在,则只是不响应请求.哈希将是你硬编码到客户端和服务器的东西.

现在的问题是如何隐藏您的身份验证令牌.只要您不开源代码,有人获取代码的唯一方法就是按照您的提及反编译您的程序.为了防范这种情况,您可能需要考虑使用proguard(http://developer.android.com/guide/developing/tools/proguard.html).

需要记住的是,此方法包含单点故障.如果您的身份验证令牌被曝光,那么您就完成了(例如HD DVD AACS加密密钥崩溃).

另一种进行身份验证的方法是基于每个用户.只要有效用户发出请求,您就不应该关心请求是来自Web浏览器还是Android应用程序.我认为这是一种更好的做事方式.通过这样做,您可以基于每个用户限制请求.但是,这需要您管理用户配置文件以及随之而来的整个蠕虫病毒.

所有这一切,尽管你不应该真的关心是否有人知道你的部分API的网址.我不知道您的特定用例,但必须有一种设计API的方法,这样您就不会关心如何获取请求.此外,如果您正在进行真正的GET,那么您不应该更改服务器上的任何内容.这意味着所有'恶意人'可以做的就是从中获取数据.这严重限制了他们可以造成的伤害.事实上,除非您拥有不希望某些人查看的敏感数据,否则您根本不会遇到任何问题.如果您这样做,那么您应该考虑我的每用户身份验证解决方案.