防止假的循环ajax请求到PHP

时间:2015-06-02 12:30:09

标签: javascript php jquery ajax json

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

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

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

用户可以非常轻松地立即将数千条记录插入我的数据库。

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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;
  }

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