我已经用 HTML5 构建了一个游戏,并且一个 Web 表单将数据发布到服务器。
游戏中的分数是使用 Javascript 计算的,表单将数据发布到服务器。
这种架构会不会容易受到攻击,客户端可以被修改,这样它会发布恶意值而不是计算的分数?
我怎样才能防止这种情况发生?
为了简短起见 - 您需要在服务器端完成所有验证。使用客户端脚本让事情看起来不错没有问题,但是你不能信任来自客户端的任何东西。
以 Stackoverflow 为例。当您投票时,它会立即在客户端计算(以使事情保持良好和快速),但一旦提交,它就会由服务器正确验证。
例如,如果我尝试对自己的答案进行投票,服务器会使用以下 JSON 拒绝它:
{"Success":false,"Warning":false,"NewScore":0,"Message":"You can't vote for your own post.","Refresh":false}
即使 javascript 愉快地提交了它。
因此,您还需要在服务器端计算您的游戏分数。
不要相信用户输入,尤其是当您向服务器发送数据时他们可能会执行 SQL 注入的表单。(另请参阅如何防止 PHP 中的 SQL 注入?)
尝试在服务器端验证尽可能多的数据。
看到您还使用 javascript 注意 javascript 注入(http://www.testingsecurity.com/how-to-test/injection-vulnerabilities/Javascript-Injection),因为它们可以将更改注入您的脚本(例如分值)