这是一个系统设计问题/挑战,而不是编码问题。
基本上,我正在考虑使用HTML,CSS和javascript在Facebook上整合Bejeweled - esque游戏。这主要是出于通过一个非平凡的项目来学习FBJS的所有小注意事项的愿望。
所以这是交易。在为Facebook开发时,实际的API调用非常昂贵;不仅有Facebook服务器的额外POST,还有api呼叫限制和限制担心。简而言之,对Facebook的呼叫越少越好。将此与即使是这个简单的益智游戏的时间问题相结合,并且有充分的理由积极地最大限度地减少回调的数量。
不是安全专家,这是我提出的设计:
此设计需要每场比赛进行三次Facebook通话:一次用于在游戏开始前存储随机种子,一次用于在游戏结束后获取,一次用于在游戏有效时更新玩家的得分。
我试图证明系统反对是直接得分欺骗(http://...?myscore=999999999或类似)。我还想减轻“向前看”的攻击,其中用户可以告诉接下来会有什么棋子进入棋盘。还应防止对托管服务器的攻击(有意或无意)。
实际问题,任何人都可以看到这个设计的缺陷吗?同样,是否有更简单的设计符合我的标准?
注意:我知道这可能是多么不必要,但这是一个有趣的问题。
<小时/> 我打算尝试在这里添加一些数字以进一步说明我的推理,这些非常粗糙,但我希望有帮助。
假设一个10x10游戏板,有大约200个潜在的移动(交换两个相邻的棋子),其中大多数是无效的。假设每次“转弯”平均有5次有效动作。如果我们将玩家行为限制在50到30,000毫秒的帧中,那么“调整”算法不会丢弃比特,有149,750个潜在的新哈希值;我有信心说至少有10,000个潜在的新哈希值必须由攻击者计算,假设使用了加密安全哈希。如果你在此处抛出最小 - 最大算法,你的决策树会很快爆炸。在这个游戏会话到期时,比如说30分钟,我相信这次攻击的复杂程度相当于写一个小机器人程序来为你玩,而这个程序无法合理地防范。
答案 0 :(得分:3)
如果客户端代码计算下一篇文章并且你无法很好地隐藏这个算法,那么一些无聊的大学生就会想到这一点。结果,他们将能够产生大量分数并击败你的意图。
答案 1 :(得分:0)
我倾向于说这是不可能的。为什么?你不能相信客户端 - 我可以分析并完全重写客户端代码并返回我喜欢的任何值。保护您免受欺骗和各种攻击的唯一方法是在服务器上执行逻辑 - 客户端将只收集用户输入并显示服务器输出。但这完全违背了您的设计目标,以最大限度地减少服务器调用次数。