1

我想建立一个系统,让许多人可以玩基于浏览器的简单(swf 或 html5)游戏(如蛇、赛车、卢多等)。这些游戏将非常简单,不需要在服务器中编写逻辑。得分最高的人将赢得一些奖品。

现在的问题是保护工作流程。我的方法可能不正确,请随时提出任何替代方案。
1.游戏开始时,会生成一个游戏ID。
2. 游戏结束后,返回分数和游戏ID。

问题是,第 2 步可以被欺骗。任何人都可以发送类似的 http 请求,生成游戏 id 和任何分数。我怎么知道分数来自我的游戏而不是直接发送。

我想加密分数,但加密机制将再次出现在 javascript 中,可以很容易地复制。

请帮忙,先谢谢了。

编辑 1:我不担心嗅探器、会话劫持、中间人攻击。HTTPS 将处理所有这些。我担心用户本身。他可以在浏览器中右键单击 > 检查并检查正在发送的请求标头。他可以轻松地重放相同的请求标头(只需右键单击并在新选项卡中打开)

4

2 回答 2

1

我想这取决于数据的价值,但听起来价值非常低。

选择一个功能上不可能猜到的 ID。例如,一个 GUID(128 位随机生成的值)。如果有人猜到了,他们就会得到游戏。但从统计上讲,他们永远不可能做到正确。如果你通过 HTTPS 发送它,那么他们就无法嗅出它(我会通过 HTTPS 发送它,只是因为)。

如果你想做得更好,你可以选择一个随机密码来配合它,但我怀疑数学是否支持这一点是必要的。听起来您的数据价值非常低。真的有关系吗?

FWIW,我更担心的是那个决定拒绝你的人,要求你为不存在的游戏存储大量数据......

于 2012-11-21T20:29:55.097 回答
1

您可以添加提交签名/编码层以隐藏数据,并添加 JS 代码混淆以使用户更难撤消该级别的保护。

但最终你无法解决问题。您将信任以预期方式运行您的代码给不受信任的客户端,这自然会产生不可信的输出。欺骗分数只是一个切入点——攻击者可以很容易地篡改客户端游戏逻辑的其他部分来作弊。

信任客户是一个长期存在的安全问题,几乎没有可能的解决方案。对于没有人关心的微不足道的高分表,您可能会通过大量的混淆来避开临时攻击者,再加上手动监控和修剪明显欺诈性的提交。

如果您正在考虑提供实际理想的奖品,您可能需要将游戏的某些重要部分移至您控制的服务器上。您需要保护哪些部分以及如何保护高度依赖于游戏,并且可能存在难以防御的残留攻击。(例如,考虑商业多人基于服务器的游戏在尝试防御诸如瞄准机器人之类的客户端黑客攻击时的长度。)

于 2012-11-22T13:43:09.367 回答