防止虚假的ajax循环请求到PHP

Prevent fake looping ajax requests to PHP

本文关键字:循环 请求 PHP ajax      更新时间:2023-09-26

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

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

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

用户可以很容易地插入成千上万的记录到我的数据库瞬间。

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

谢谢你的帮助

确保安全的唯一方法是添加验证码

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

如果可能的话,依赖其他方法(如cookie或某种类型的客户端验证)是有风险的。例如,KA_lin的解决方案可以在5分钟内被攻破:恶意用户可以发送伪造的cookie,这些cookie的页面计数总是为0,因此总是允许发布。或者更糟糕的是,他可能会创建一个小程序,在不发送任何cookie的情况下将内容发布到您的页面。上面的代码将创建一个新的cookie并接受他的帖子,每次…

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

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