我正在开发一款联网的iOS游戏。
在其GKMatch类引用中,Apple有这样的说法:
重要提示:从其他玩家收到的数据应视为不受信任的数据。请务必验证从匹配中收到的数据并仔细编写代码以避免安全漏洞。有关详细信息,请参阅“安全编码指南”。
现在我认为没有人会关心黑客攻击我的小游戏。如果有人能够用它来攻击别人的手机,那将是另一回事。
我通常使用接收的数据通过decodeObjectForKey:方法创建对象。
我需要做什么?
答案 0 :(得分:0)
您可以检查收到的标量值(如整数和浮点数)是否在对您的游戏有意义的范围内。例如,如果您的游戏经过编码以使得可达到的最大分数为100个单位,则应丢弃一个表示分数超过最大分数的接收标量。
对于字符串,您应该检查它们的长度是否合理,例如,玩家名称的字符串应该小于50个字符。如果您使用的是具有某种特定格式的字符串,例如@"kMyGameHighScoreKey"
,则应检查收到的字符串是否符合该格式。
一般的想法是,你检查你收到的只是对你的游戏有意义的东西,仅此而已。在任何其他情况下,您应该丢弃收到的数据。
如果我理解正确,在您的情况下,您只会收到一个字符串,然后您将其用作从本地存储中读取某些数据的密钥。在使用decodeObjectForKey:
方法使用之前,您应该检查收到的字符串是否确实是预期的密钥之一。不要盲目地使用NSData*
的{转换后的didReceiveData:
参数作为decodeObjectForKey:
中的关键字。