考虑我用JS实现了一个HTML5游戏,我打算将记录保存到数据库中,并且所有js文件都已缩小并进行模糊处理。但是客户端得分的结果被保存到变量中,我们只想在服务器端(php)以某种方式保存该得分。
使用FireBug或类似的客户端开发人员工具阻止用户欺骗和更新其分数的最佳解决方案是什么?我知道可能无法100%保护它,但我想尽可能做到最好。
顺便说一下,随着HTML5应用程序的快速扩展,应该有一些解决方案来确保数据传输的健康状况。
谢谢
答案 0 :(得分:3)
我知道可能无法100%保护它,但我想这样做 尽可能最好。
当然不可能;您的代码在客户端的计算机上运行,因此客户端可以完全控制它。你不能保守任何秘密 - 你可以混淆你内心的内容,但在一天结束的时候,我仍然可以随心所欲地拦截,修改你的HTTP请求。
控制事物的唯一方法是让客户端根据游戏状态的知识报告服务器验证的操作;然后,服务器向客户端发送这些操作的结果,以便友好的客户端可以保持其游戏状态的概念与服务器的概念一致。
如果您不准备这样做,请不要打扰。如果你依赖的客户即使在最轻微的程度上也不会充满敌意,只需要一个人就有时间杀死你,让你被遗忘。
答案 1 :(得分:2)
1)如果可能,请使用HTTPS;
2)在服务器端,在http标头中放置一个随机密钥(您可以在回发中验证);
3)在客户端,使用此随机密钥对您的分数进行密钥加密。因此,即使分数保持不变,您每次都会有不同的加密分数;
4)将加密的分数和随机密钥放在http标头中;
5)将未加密的分数放在查询字符串中以欺骗您的用户(真正的加密分数在您的http标头内)。发布您的数据;
6)在服务器端,忽略查询字符串中的作弊分数,并使用密钥(也在http标头中)解密http标头中的分数。在解密之前,不要忘记验证密钥;
7)您还可以验证您的加密分数和作弊分数是否相同,这样您就可以知道女巫用户在作弊。
答案 2 :(得分:1)
我们刚开发了一款基于浏览器的游戏,并且遇到了完全相同的问题。最安全的方法是在服务器上执行整个游戏逻辑,但这可能需要做很多工作。我们最终做的是在javascript代码中隐藏操作,然后根据该操作计算一个数字,然后我们将得分和该数字存储在cookie中并在服务器端进行检查。
实施例: 用户得分235 - >保存在cookie中
操作:235 - > (2 + 3 + 5)* 3.19 - >将结果存储在cookie中(3.19是我们选择的随机数)
将分数发送到服务器
在服务器上获取分数cookie并执行相同的操作,如果分数和操作与存储在cookie中的分数和操作相同,则接受分数,否则拒绝分数。 它仍然不是100%安全,但我们已经存储了近2000个分数,而且没有一个被攻击