如何保护/编码Javascript POST请求


How to secure/encode Javascript POST requests

我有一个游戏,其中我的JavaScript通过POST调用PHP脚本来改变数据库中的值。我怎样才能防止有人重复请求并给自己十亿分?

现在我通过sha1()传递一个密码,并检查它是否在PHP端,但这并不能阻止有人重复请求。

我不能使用时间戳,因为时间会在调用(JS POST请求)和运行PHP脚本之间流逝。


编辑:

  • 我的PHP脚本不增加数据库值(点数=点数+10),它接受传递给它的值并更新字段(点数=300)
  • 我更新了游戏中每个交互的几个表格(每个交互都会导致分数上升)。其中一个会记录每一张选票。该表只允许用户对任何图像投票一次。如果我先做这个更新,如果用户试图重复这个请求,结果将返回一个错误,我可以终止PHP脚本。

这是否足够安全?我还需要担心防止重复请求吗?

听起来很多逻辑现在仍然是客户端,所以你不能阻止别人发送"score.php? "分数=1000"多次

在服务器端添加逻辑,检查给定请求的执行频率,或者,更好的是,完全在服务器端执行游戏逻辑(这样用户就不必提交自己的分数,而只需请求执行特定的游戏动作,最终产生一个分数,然后可以添加给用户)。

如果您有某种形式的会话标识符,您可以增加请求已发出的次数。然而,这并不是万无一无,清除会话cookie将允许该请求再次发出。

你需要某种形式的登录来防止有人清除他们的cookie,甚至是cURL脚本循环。

编辑:

作为一种权宜之计,您可以添加一种形式的CSRF保护,需要对每个请求应用一次性散列以使其有效。

你也可以从post传递一个标志,当你真的想要更新数据库中的值时,你可以设置为任何值,否则将其设置为0。在更新时检查标志的值并进行相应的更新

假设GET或POST都可以由客户端轻松完成。如果你只是发送一个原始分数到服务器,这永远不会是好的。我从来没有写过一款在客户端出现这么多逻辑的游戏。客户端应该只向服务器发送命令,服务器决定这是否是一个有效的事务/状态。服务器或多或少知道客户端的状态,而客户端只是反映这个状态。这可能是保证客户行为合法的唯一方法。

使用captcha Wiki CAPTCHA, reCAPTCHA

另外,使用Session写下number of repeated requests完成我的用户到服务器和increment它在每个成功的请求,

然后阻止用户访问您的PHP脚本与session storage data的帮助。PHP会话