检查http请求是否来自我的安卓应用程序

2022-08-31 01:09:14

我从外部服务器检索数据以用于我的Android应用程序。我希望此数据只能通过我的应用访问。我使用标准的http连接从json格式的apache / php服务器获取数据。我还向服务器发送一些参数以检索相关数据。现在,我计划做的是:

  1. 发送参数
  2. 发送类似 md5(“someSecretPhrase”+params) 的东西。
  3. 检查服务器端的密码短语是否正确。

现在的问题是 - 这是逆向工程的安全方法吗?就目前而言,我想不出其他可能获得这些数据。但是,如果有人能够反编译我的apk,他也将能够检索这个“someSecretPhrase”(在服务器端很难做到),然后访问服务器,不是吗?这是一个真正的威胁吗?服务器是否有其他方式对我的应用进行身份验证?

我看了论坛,例如。确定是否来自 Android App 的 HTTP 请求?然后做出适当的响应,但它们并不能解释反编译问题。


答案 1

安全的基本规则之一是:您不信任客户端数据。曾。

您应该考虑您的应用程序已反编译,攻击者已知的所有“秘密”密钥等。

但是,您可以阻止攻击者伪造您的请求的尝试。发送(和验证)您的请求的校验和是方法之一(您的想法)。MD5(secret_key + params)

您还可以切换到二进制加密协议。但这需要更多的工作和完全不同的服务器架构。


答案 2

您可以通过在字符串中设置所有url链接和参数名称来隐藏链接.xml例如:http://wwww.yourdomain.com/yourpage.any user_name并在以下位置获取url:

String serverUrl = Resources.getsystem().getstring(R.strings.name_your_link_id); String parameterKey = Resources.getsystem().getstring(R.strings.name_your_parameter_id); Uri url = Uri.parse(serverUrl+"?"+parameterKey+"=" + yorusername);

并提出任何http请求 HttpURLConnection con = (HttpURLConnection) url.openConnection();

当任何人尝试反编译你的应用程序时,他将只将id显示为R中的长整数.java文件获取这样的代码String serverUrl = Resources.getsystem().getstring(12346546564); String parameterKey = Resources.getsystem().getstring(123321321132);


推荐