在后端,我正在使用Java。我有一个HTML5游戏;当用户完成它时,我发送一个Ajax调用以将分数保存到数据库。现在,有人可以轻松地使用Fiddler和Firebug等工具来修改此Ajax请求,并将更好的分数发送给服务器。如何确保用户无法操纵分数!
在后端,我正在使用Java。我有一个HTML5游戏;当用户完成它时,我发送一个Ajax调用以将分数保存到数据库。现在,有人可以轻松地使用Fiddler和Firebug等工具来修改此Ajax请求,并将更好的分数发送给服务器。如何确保用户无法操纵分数!
Answers:
不要只是将整数分数发送到服务器。发送一组游戏统计数据,可用于验证分数是否现实。或者,您可以实施一些预共享密钥来计算分数。您可以在整个游戏中发送增量分数和统计数据,并确保增加合理。
但是,我不会对此太担心。上面的建议将使发送假乐谱更加困难,但并非不可能。但是,如果您只是觉得有点困难,那么大多数玩您的游戏的人都不会对尝试作弊感兴趣。
请注意您如何允许游戏与服务器通信。您不希望您的游戏成为您的服务器进行黑客入侵的入口。确保始终验证输入内容,并且永远不要信任客户。
正如Byte56所说:“永远不要信任客户端”,但是:
永远不要相信客户端是要付出代价的:
在服务器上玩所有游戏会大大增加您的基础架构成本。
假设大多数玩家不会作弊
,并且最高的高分将在一段时间后稳定下来,并且不再改变很多
有一个中间的方法。
记录游戏(在客户端上)。
(取决于游戏类型,这可能超级简单(例如国际象棋)或有点复杂(例如多人FPS),
但始终可以实现。)
玩家完成游戏后,只需提交分数即可。
如果得分在最高值的某个范围内(例如最高1%或最高5%),
请要求玩家记录数据
并在服务器上重播该游戏。
如果分数匹配,请接受分数。
这样,您在大多数情况下都不需要任何其他服务器端资源,
但可以确保最高分有效。