繁体   English   中英

如何防止任何人与我的服务器通信,除了我的Android应用程序

[英]How can I prevent anyone from communicating with my server except my Android app

我在Google应用引擎上安装了休息服务器,我只希望我的应用能够拨打我的服务器。

我可以在谷歌应用程序引擎上打开一个安全选项来实现这个目标吗? 如果不是我能做什么?

我知道您可以通过以下方式限制对某些页面的访问,但我不确定它是否可以应用于REST调用

<security-constraint>
        <web-resource-collection>
            <url-pattern>/cron/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
</security-constraint>

在openssl中生成privatekey / publickey对。 在应用程序分发中分发公钥。 有一个名为appName的自定义http标头,并加密appname(一个唯一的常量不可预测位大号)并发送它。 确保您的代码经过混淆,以便没有人能够查看appname。 然后,即使有人跟踪http调用,您也在进行加密,因此appname将显示为加密值。 在服务器端使用私钥解密appname。 希望这可以帮助。

(已经有三个答案,并且在这个问题上我都有不同的想法 - 所以我认为这是一个很好的问题。)

我的理解是这样做(谷歌)的推荐/规范方式是OATH2。 谷歌已经认识到OATH2很棘手,他们尝试简单的就是云端点,以及针对Android客户端的Google Play服务。 有关这方面的说明如下:

https://developers.google.com/appengine/docs/java/endpoints/consume_android#Java_Making_authenticated_calls

请注意,虽然文档强调用户身份验证,但它也支持应用程序身份验证。

我不知道(但是想)是非端点应用程序如何做同样的事情,所以我想这只是一个部分答案。

简短的回答是,你不能,至少不是完全安全。

https://security.stackexchange.com/questions/826/how-can-i-securely-authenticate-the-client-application-sending-me-data

答案很长,你可以让黑客很难。 通常,这通过在应用程序中嵌入密钥,对其进行模糊处理以及对获取密钥的代码进行模糊处理来实现。 这并不能让某人找到钥匙,只是更难。

其中一个更强大的消费者系统是微软的Silverlight DRM,你可能想调查它是如何工作的: http//www.iis.net/learn/media/iis-media-services/content-protection-in-silverlight

您可以在访问时使所有REST服务都需要访问密钥和密钥。 然后,应用程序可以将这些存储在配置设置下,并在发送到App Store时保留为空白。

然后,当您下载应用程序时,您可以进入配置设置并插入您为REST服务设置的密钥和密钥。 (这样可以防止任何人访问服务,因为您手动添加了所使用的Key + Secret)

我建议在服务器上设置所有未经授权的访问尝试的IP日志,这样如果有人通过无效访问尝试向您的Web服务发送垃圾邮件,您就可以创建黑名单。

然后最重要的是你可以通过HTTPS完成这一切。

选项很少:

  • 首先你可以通过IP限制。 如果你的Android应用程序每次都获得动态IP,这不是一个好方法。
  • 其次,你可以在服务器和客户端上使用一些只有你知道的算法。 服务器可以将数据发送到客户端,客户端运行该算法并修改数据。 然后发送回服务器。 服务器还运行该算法并检查响应。 如果响应等于服务器计算的响应,则服务器知道客户端已获得授权。 在这种情况下,从服务器发送的初始数据应该每次都不同。
  • 第三,您可以使用一些公开的散列函数而不是您自己的算法。 这个想法是一样的。 服务器使用相同的散列函数,并检查客户端的响应是否与其计算相同。

执行此操作的规范方法是使用SSL和客户端证书。 我不确定App Engine是否支持此功能。

但请注意,如果您正在分发您的APK,那么您不能仅依赖于随APK分发的任何内容 - 这是可能的(如果不太可能,取决于您作为目标的高调)提取欺骗应用程序所需的任何信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM