iOS GKMatch didReceiveData:fromPlayer:security

时间:2011-03-19 17:16:59

标签: iphone security ios validation gamekit

我正在开发一款联网的iOS游戏。

在其GKMatch类引用中,Apple有这样的说法:

重要提示:从其他玩家收到的数据应视为不受信任的数据。请务必验证从匹配中收到的数据并仔细编写代码以避免安全漏洞。有关详细信息,请参阅“安全编码指南”。

现在我认为没有人会关心黑客攻击我的小游戏。如果有人能够用它来攻击别人的手机,那将是另一回事。

我通常使用接收的数据通过decodeObjectForKey:方法创建对象。

我需要做什么?

1 个答案:

答案 0 :(得分:0)

您可以检查收到的标量值(如整数和浮点数)是否在对您的游戏有意义的范围内。例如,如果您的游戏经过编码以使得可达到的最大分数为100个单位,则应丢弃一个表示分数超过最大分数的接收标量。

对于字符串,您应该检查它们的长度是否合理,例如,玩家名称的字符串应该小于50个字符。如果您使用的是具有某种特定格式的字符串,例如@"kMyGameHighScoreKey",则应检查收到的字符串是否符合该格式。

一般的想法是,你检查你收到的只是对你的游戏有意义的东西,仅此而已。在任何其他情况下,您应该丢弃收到的数据。

如果我理解正确,在您的情况下,您只会收到一个字符串,然后您将其用作从本地存储中读取某些数据的密钥。在使用decodeObjectForKey:方法使用之前,您应该检查收到的字符串是否确实是预期的密钥之一。不要盲目地使用NSData*的{​​转换后的didReceiveData:参数作为decodeObjectForKey:中的关键字。