防止假的循环ajax请求到PHP

在我的网站上,我为博客post创建了一个评论部分。 用户可以编写注释,单击按钮,AJAX请求将发送到包含JSON数据的PHP。 PHP将处理并validation数据,然后将其插入数据库。 成功时,将从数据库中检索所有注释,并使用JQuery重新加载所有页面的注释。

问题是任何人都可以使用他们的浏览器控制台来伪造AJAX请求,填写他们自己的JSON,然后将请求发送给PHP。 如果这样做,所有发生的事情是我的客户端validation是无用的。 服务器端validation仍然有效。 但是,还有一个更大的问题。

for(var i = 0; i < 10000; i++) { //ajax request } 

用户可以很容易地立即将数千和数千条记录插入我的数据库。

有没有人对如何防止这样的事情发生任何建议? 它必须涉及在服务器端创建一些用户无法猜到的东西,并在AJAX请求期间以某种方式检查它。 我只是不确定到底是怎么回事。

谢谢您的帮助。

在这方面保证安全的唯一方法是添加CAPTCHA。

这将阻止大量/自动化post。 一个可能使用的库是Securimage 。 它易于使用和集成。 你可以用你的AJAX东西在10分钟内运行它。

如果可能的话,依赖其他方式(例如cookie或某种类型的客户端validation)是有风险的。 对于实例, KA_lin的解决方案可能会在5分钟内泄露:恶意用户可以发送伪造的cookie,其总页数为0,因此将始终允许发布。 或者更糟糕的是,他可以创建一个小程序,它将发布到您的页面而根本不发送任何cookie。 上面的代码将创建一个新的cookie并接受他的post,每次……

我会添加一个会话变量,其中包含用户发布的post数量,给定许多页面可以形成类似$SESSION['page_id_total_nr_comments']并跟踪此数字,添加一个配置变量,让我们可以添加最多的例如,每篇文章的X条评论:

  function canUserAddComment($pageId){ $maxAllowed =......; if(!isset($SESSION[$pageId+'_nr_comments'])){ $SESSION[$pageId+'_nr_comments'] = 0; } if($SESSION[$pageId+'_nr_comments']< $maxAllowed){ $SESSION[$pageId+'_nr_comments']++; return true; } return false; } 

要么

在保存时获取已经在文章上使用的评论数量,并决定是否可以制作另一个(仍然使用配置变量)