我正在编写一款iPad游戏,可将高分类型数据(即超出Game Center支持的数据)发送到Google appengine数据存储区。它通过http GET
或POST
请求发送这些更新,例如http://myapp.appspot.com/game/hiscore/925818
以下是我如何确保appengine数据存储区不会被错误数据发送垃圾邮件。
zip/encrypt使用iOS二进制文件中保存的硬编码p@ssw0rd
的有效负载数据。将二进制数据编码为base64。在url查询字符串或POST数据中传递base64有效内容。在handler,unbase64,然后用p@ssw0rd
解压缩数据。按照有效负载中的说明更新高分数据类型。
CON:如果p@ssw0rd
以某种方式从iOS二进制文件派生,则此方案可能会失败。
这是否足够/充足?还有另一种方法吗?
答案 0 :(得分:3)
绝对没有办法确保您的客户端发送数据。您可以尝试的是混淆某些东西,使垃圾邮件制造者更难以提交数据。
但是我认为你可以做两件事:
也许你可以选择两者兼而有之。让我举个例子:
创建一些自定义(复杂!)算法,如(简称):
var result = ((score XOR score / 5) XOR score * 8) BITSHIFT_BY 3
然后使用带有该结果的静态存储密钥和一个众所周知的散列函数,如:
var hash = SHA256(StaticKey + result)
然后将带有分数的哈希发送到服务器。服务器必须通过执行完全相同的步骤(评估算法+执行SHA256的操作)来“验证”哈希值并比较哈希值。如果他们匹配的分数希望来自你的应用程序,否则扔掉它,它来自垃圾邮件发送者。
然而,这只是你可以做的一件事。看看the link from mfanto,您还可以看到许多其他想法。 请务必不要告诉任何人你是怎么做的,因为这是security through obscurity。
答案 1 :(得分:0)
好的我,有两种方法可以做到这一点。
1)购买SSL certificate for $FREE.99并仅向您的服务器打开HTTPS连接以提交其核心类型数据。由于握手往返时间,连接速度应该在500 ms左右。
2)Embed an RSA public key certificate in your iOS app和have the RSA private key on your server。
然后,您可以使用第二种方案执行以下两项操作之一:
如果您的数据信息非常小(≤256B),您只需加密并发送256B软件包(RSA有效负载受密钥中的位数限制)
ELSE如果数据太大(> 256B),则生成随机对称密钥(AES)并打包:
然后服务器获取前256个字节并对其进行解码,然后服务器使用该AES密钥解密其余的消息。
以上2只能防止窃听,但表示隐藏了邮件的数据格式。在某种程度上,它仍然是一种默默无闻的安全类型,因为如果黑客拥有您的公钥和您的消息格式,他们就可以制作消息。