3

在加密方面,我完全是个菜鸟,我认为我的问题完全错了,让我解释一下:

我希望 Android 应用程序联系服务器以获取要在应用程序中显示的项目。然后,如果用户与此项目交互,我想向服务器发送反馈,告诉服务器单击了哪个项目以将其保存在数据库中。

第一件事是我不希望任何人在将这些“反馈”发送到服务器时通过网络“拦截”这些“反馈”。所以我决定使用https连接。但是,假设我要求反馈的脚本是https://mydomain.com/myscript.php(带有 POST 请求)。我不希望有人对我的 Android 代码进行逆向工程并看到我正在调用此脚本来发送反馈,因为这样他就可以将它用于相同的目的。

所以然后我想“嘿,当我必须向服务器发送反馈时,让我们从服务器中获取一个密钥以将其发送回”。但同样,要获得这个密钥,我需要调用一个 php 脚本,如果有人可以调用这个脚本,得到密钥,他就可以根据需要发送反馈。

在我看来,这似乎没有尽头。而且我知道有一个 :DI 认为我正在以完全错误的方式看待这个问题。你有一些指导方针可以遵循吗?

谢谢 !

4

1 回答 1

4

不要相信客户

您不能将信任扩展到客户端软件。Viega 和 McGraw 在“构建安全软件:如何以正确的方式避免安全问题”中有一句很好的引用。

人们通常在客户端代码中隐藏秘密,假设这些秘密是安全的。将秘密放入客户端代码的问题在于,有才华的最终用户将能够滥用客户端并窃取其所有秘密。与其做出需要成立的假设,不如不愿扩大信任。服务器应该被设计成不信任客户端,反之亦然,因为客户端和服务器都会被黑客入侵。不愿信任有助于划分。

一个办法

您不能信任客户端软件。但有时您可以信任个人用户。您可以删除垃圾邮件。需要考虑的事项:

  1. 使用垃圾邮件分类器检测垃圾邮件。这将需要一些时间。
  2. 您可以对来自单个 IP 地址的 POST 进行速率限制
  3. 您可以要求用户登录您的应用程序才能撰写反馈。然后来自特定帐户的速率限制反馈。
  4. 更好的是,您可以要求人们首先使用 Google+ 或 facebook 的服务器进行身份验证(即,您的应用程序要求用户验证他们的 Google 凭据。这对他们来说应该很轻松,因为 95% 的 Android 用户拥有 Google 凭据。)在发布之前. 然后对每个帐户进行速率限制。大多数机器人无法访问许多/任何虚假的 facebook/Google+ 帐户,因为您必须破解验证码才能注册。这应该使机器人很难发帖。

大公司使用 4、3 和 1 的组合。Google Play 商店用于尝试检测所有垃圾评论并将其删除。但现在他们也使用#4。您不能在没有登录的情况下在 Google Play 商店上发表评论!

编辑:这也可能有用http://android-developers.blogspot.ca/2013/01/verifying-back-end-calls-from-android.html?m=1

于 2013-02-02T01:48:48.980 回答