如何保护从HTML5游戏向我的服务器发送分数


13

在后端,我正在使用Java。我有一个HTML5游戏;当用户完成它时,我发送一个Ajax调用以将分数保存到数据库。现在,有人可以轻松地使用Fiddler和Firebug等工具来修改此Ajax请求,并将更好的分数发送给服务器。如何确保用户无法操纵分数!

Answers:


18

不要只是将整数分数发送到服务器。发送一组游戏统计数据,可用于验证分数是否现实。或者,您可以实施一些预共享密钥来计算分数。您可以在整个游戏中发送增量分数和统计数据,并确保增加合理。

但是,我不会对此太担心。上面的建议将使发送假乐谱更加困难,但并非不可能。但是,如果您只是觉得有点困难,那么大多数玩您的游戏的人都不会对尝试作弊感兴趣。

请注意您如何允许游戏与服务器通信。您不希望您的游戏成为您的服务器进行黑客入侵的入口。确保始终验证输入内容,并且永远不要信任客户。



@ Byte56任何形式的混淆或加密都不会保护您的代码免受调试器在播放过程中用来修改游戏数据的影响。如果游戏发生在客户端,则基本上不可能阻止这种形式的欺诈。启用Javascript的浏览器不是受信任的计算设备。
MarkR 2012年

10

正如Byte56所说:“永远不要信任客户端”,但是:

永远不要相信客户端是要付出代价的:
在服务器上玩所有游戏会大大增加您的基础架构成本。

假设大多数玩家不会作弊
,并且最高的高分将在一段时间后稳定下来,并且不再改变很多

有一个中间的方法。

记录游戏(在客户端上)。
(取决于游戏类型,这可能超级简单(例如国际象棋)或有点复杂(例如多人FPS),
但始终可以实现。)

玩家完成游戏后,只需提交分数即可。
如果得分在最高值的某个范围内(例如最高1%或最高5%),
请要求玩家记录数据
并在服务器上重播该游戏。
如果分数匹配,请接受分数。

这样,您在大多数情况下都不需要任何其他服务器端资源,
但可以确保最高分有效。


2
换句话说,谁在乎是否会欺骗除最高分以外的任何内容(为什么他们会这么做?),所以这是您唯一需要验证的内容。
13年

4

不用担心; 如果您信任客户端,那么从所有攻击中进行保护几乎是不可能的。如果没有人使用Fiddler等修改AJAX请求,他们可以简单地启动JS调试器并修改游戏数据以给自己1000条生命,等等,或者修改您的代码,或者做100件事您没有想到。

几年前,我写了这样的游戏,据我所知,没有人以这种方式作弊。除了在分数表上有您的名字以外,没有其他奖项。


4

例如通过使用社交排行榜来减少作弊的社交动机(作弊只会使您对少数朋友看起来不错,但并不会破坏所有人)。

在服务器上验证。乔尔·波洛尼(Joel Poloney)在Game Developer 2012年9月的扩展您的在线游戏”中撰写了很好的技术文章。


2

当您要创建防作弊的在线游戏时,您需要处理服务器上的所有游戏逻辑。客户端发生的所有事情都可以由用户控制和操纵。您可以尝试使用诸如加密或模糊处理之类的技术,但是最终,只有模糊处理才能确保安全,只有足够确定的人才能规避。

当然,在服务器上运行的游戏开发起来要复杂得多,服务器端需要更多资源,并且网络延迟不利于游戏体验(尤其是快节奏的游戏),但这是有效的唯一方法防止玩家作弊。


即便如此,也不能阻止所有作弊行为-只是显而易见的“是的,我合法地获得了惊人的积分”。由于东西必须在客户端上运行,他们最终与一些控制不管。至少,任何客户端-尤其是Web浏览器-均可编写脚本。
cHao
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.