发送ajax请求和防止数据操作的最安全解决方案是什么?

What is the most secure solution to send ajax request and prevent data manipulation?

本文关键字:安全 解决方案 是什么 操作 数据 请求 ajax 求和 发送      更新时间:2023-09-26

假设我使用JS执行了一款HTML5游戏,并且我打算将记录保存到数据库中,并且所有JS文件都已经缩小并混淆了。但是客户端得分的结果被保存到一个变量中,我们只是想以某种方式在服务器端(php)中保存该分数。

防止用户作弊和使用FireBug或类似的客户端开发工具更新他们的分数的最佳解决方案是什么?我知道这可能不可能百分之百地保护它,但我想尽可能做到最好。

随着HTML5应用程序的迅速扩展,应该有一些解决方案来确保数据传输的健康。

谢谢

我知道可能不可能百分之百地保护它,但我想这样做尽可能好。

当然不可能;您的代码在客户端的机器上运行,因此客户端对它有完全的控制。你不能保守任何秘密——你可以随心所欲地混淆,但在一天结束的时候,我仍然可以随心所欲地看到、拦截和修改你的HTTP请求。

保持控制的唯一方法是让客户端报告操作,服务器根据其对游戏状态的了解来验证;然后服务器将这些动作的结果发送给客户端,以便友好的客户端可以保持其游戏状态的概念与服务器的一致。

如果你不准备那样做,那就别麻烦了。如果你指望客户对你没有丝毫敌意,那么你只需要一个人()花点时间就能把你干掉。

1)如果可能的话,使用HTTPS;

2)在服务器端,在http头中放置一个随机密钥(您可以在回发时验证);

3)在客户端,使用此随机密钥对您的分数进行密钥加密。因此,即使分数保持不变,每次也会有不同的加密分数;

4)把加密的分数和你的随机密钥放在http头;

5)把分数没有加密在查询字符串欺骗你的用户(真正加密的分数是在你的http头)。发布你的数据;

6)在服务器端,忽略查询字符串中的作弊分数,使用密钥(也在http报头中)解密http报头中的分数。在解密之前,不要忘记验证密钥;

7)你还可以验证你的加密分数和作弊分数是否相同,这样你就可以知道哪些用户在作弊。

我们刚刚开发了一款基于浏览器的游戏,并遇到了同样的问题。最安全的方法是在服务器上完成整个游戏逻辑,但这可能需要大量的工作。我们最终做的是在javascript代码中隐藏一个操作,然后根据该操作计算一个数字,然后我们将分数和该数字存储在cookie中,并在服务器端检查它们。

的例子:用户得分235 ->保存在cookie

操作:235 ->(2 + 3 + 5)* 3.19 ->将结果存储在cookie中(3.19是我们选择的随机数)

将分数发送到服务器

在服务器端获取分数cookie并执行相同的操作,如果分数和操作与cookie中存储的分数相同,则接受分数,否则拒绝分数。它仍然不是100%安全,但我们存储了近2000个分数,似乎没有一个被黑客攻击过