我的目标是通过REST从Android游戏中阅读并安全发布高分。我找到了一个question和一个好的提案作为答案。
我对接受的答案有疑问。我会将密钥硬编码到应用程序中并使用它来md5加密网址。结果作为参数附加到url本身(请参阅链接发布的答案)。当我另外使用SSL时,我认为它对我的情况没有任何好处。我也需要使用私钥,当有人破解并反向设计我的应用程序时,他会获得私有SSL密钥和密钥。我不会发送密码或一些关键数据,只是用户输入的名称或带有分数的昵称,也可能是国家/地区。有根电话的人可以看到网址,但不能用这种方法伪造服务器上的高分,不是吗?因此,如果我省略SSL并且只使用HTTP而不是HTTPS,那对我来说没有任何不利,对吧?或者我没有想到这种方法有什么问题吗? (如果可能的话,我想省略SSL,因为它更容易实现,而且在Google Play中使用加密应用时,美国出口法规的这个问题对于我来说只是将高分数发送到服务器来说太麻烦了。)
答案 0 :(得分:4)
当我另外使用SSL时,我认为这对我的案例没有任何好处
这会让某人嗅到流量并看到你的密钥更加困难。
拥有root手机的人可以看到这个URL,但不能用这种方法伪造服务器上的高分,不是吗?
他们当然可以使用您的密钥执行HTTP请求。他们不需要根据手机来查看密钥。他们是否需要根据他们的手机来使用HTTP请求的结果,我不能说。
因此,如果我省略SSL而只使用HTTP而不是HTTPS,那么对我来说没有任何不利之处,对吗?
跳过SSL可以让某人更容易使用代理服务器或其他形式的流量嗅探器查看您的密钥。
使用加密应用时美国政府补贴的问题
我不知道你在说什么。
答案 1 :(得分:0)
SSL只会阻止客户端和服务器之间的嗅探。如果您不打算在客户端和服务器之间发送任何秘密,那么使用SSL是没有意义的。在你的应用程序中发送硬编码的“秘密”密钥是一个坏主意:反编译应用程序意味着密钥不再是秘密。
拥有root手机的人可以看到这个URL,但不能用这种方法伪造服务器上的高分,不是吗?
任何拥有“密钥”的人都可以发出HTTP(s)请求并设置他们想要的任何组件。 永远不要相信您的客户!您应该计算服务器本身的核心,然后将其返回给客户端。最好不要相反。
答案 2 :(得分:0)
您正在散列网址的一部分,如下所示:
http://yourserver/?key=hashed_value&score=100
但是根本没有提供安全性,客户端仍然可以看到那个 URL并自行发布POST,如下所示:
http://yourserver/?key=hashed_value&score=300
黑客使用的散列值与您的应用使用的相同。
您必须使用HTTPS达到预期目的。
请注意,我使用了" GET"在我的示例中,但POST是相同的,如果不是HTTPS,则可以看到整个HTTP请求