2014-09-21 88 views
0

我已经使用Javascript和PHP构建了一个简单的游戏。一旦用户点击目标分数,他们可以将他们的名字添加到高分数据库mysql数据库。我使用PHP POST获取他们的分数并将其添加到MySQL。防止后退按钮漏洞? PHP

当某人得到一个高分并输入他们的名字后,它将得分变量重置为零,并将它们重定向回带有标题('位置')的主游戏页面。如果他们一次点击后退按钮,一切都很好,因为我重置了变量,所以它显示他们的分数为零。但是,如果他们点击后退按钮两次,它会提高他们的分数,他们可以再次输入他们的名字,并用他们的名字淹没高分数据库。

无论如何要防止这种?

+0

添加一些服务器端验证以验证高分是否已提交。 – JimL 2014-09-21 18:54:23

+0

@JimL好的,谢谢,你可以指出我可以详细说明如何做到这一点? – m1xolyd1an 2014-09-21 18:56:23

+0

在一个正在播放的游戏的会话中创建一个[unique id](http://php.net/manual/en/function.uniqid.php)。当他们提交一个分数时,请提交唯一的ID并随后生成一个新的分数。如果他们尝试再次提交,请检查提交的ID是否尚未使用。 – Luke 2014-09-21 19:00:14

回答

3

您需要检查用户的至少一个识别功能,并检查他们是否在提供表单之前提交了分数。还有,你能做到这一点,每一个都有自己的弱点不同的方式,所以这是最好的混搭,但有的把我的头顶部有:

  • 检查具有相同IP和用户的人 - 代理字符串在最后x分钟内未提交高分(尽管这可能会阻止提交某些合法分数 - 请考虑使用相同浏览器且具有相同ip的学校/办公室)

  • 在抵达时放入跟踪Cookie与一个识别用户ID。然后检查该用户标识在最后x分钟内未提交分数。 (例如,如果你想开始一个PHP会话)

  • 分数提交后向浏览器添加一个cookie,然后在提供表单之前检查这个cookie(是的,它可以很容易地通过删除cookie来解决)。或者您可以在会话中设置一个值)

+0

谢谢我将使用您的想法与Doctus的每个会话生成不一致字符串的评论 – m1xolyd1an 2014-09-21 19:10:22