2015-06-02 67 views
2

在我的网站上,我为博客文章创建了评论部分。用户可以写评论,点击一个按钮,并将AJAX请求发送到包含JSON数据的PHP。 PHP将处理&验证数据,然后将其插入到数据库中。成功后,所有评论都从数据库中检索出来,并使用JQuery重新加载页面的所有评论。防止假循环Ajax请求到PHP

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

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

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

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

感谢您的帮助。

+2

有人可以做同样的事情,只需查看发送ajax请求的地址并用任何语言编写脚本(如shell脚本和卷曲)发送连续的数据请求。 Google对PHP的速率限制。 – Anthony

回答

0

我会添加一个会话变量,其中包含用户发布的帖子数,给定很多页面,您可以形成类似$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; 
    } 

OR

保存时得到的评论数量上的文章已经取得和使用决定是否公顷可以(用配置变量仍然)再拍

1

要在这方面保证安全,唯一的方法就是添加验证码。

这会阻止大量/自动化的帖子。一个可能的库是Securimage。使用和整合起来很简单。您可以在10分钟内使用您的AJAX内容运行它。

依赖于其他方式,如cookie或客户端验证某种类型是有风险的,如果可能的话。对于instnace KA_lin的解决方案可能会在5分钟内受到影响:恶意用户可能会发送伪造的cookie,其页数始终为0,因此将始终允许发布。或者更糟糕的是,他可能会创建一个小程序,该程序将发送到您的页面而不发送任何cookie。上面的代码将创建一个新的cookie并接受他的帖子,每次...