减少JavaScript中的刷新余量?

时间:2012-10-22 19:23:41

标签: php javascript page-refresh

  

可能重复:
  Prevent PHP script from being flooded

我的某些“朋友”通过按住刷新键在我的网站上乱搞。这使得他们的内容的网页浏览量不切实际地增加,并且还增加了服务器负载到PHP停止运行的点。

我希望有没有办法防止这种强烈的刷新(其中一个在1 1/2小时内得到3万个请求)使用PHP或JavaScript?

3 个答案:

答案 0 :(得分:3)

您可以始终计算用户从某个IP地址发出的请求数量,并在达到某个限制后停止返回除“未授权”之外的所有请求。

这是一个非常简单的解决方案,但可能会完成这项工作。您可以按请求/时间间隔或两分钟内不超过100页的请求将其剪切掉。然后,您可以禁止IP,或者在指定的时间内返回错误代码。指定的时间可能是5小时的硬编码,或者你可以等待他们的请求/时间间隔有机地下降。

function isIpBlocked($ip)
{
    //do mysql query to check if column is true
}

function shouldIpBeBlocked($ip)
{
    //do mysql query to check if number of request over a certain interval is too high
}

if(isIpBlocked($ip))
{
    header('HTTP/1.0 401 Unauthorized');
}
else
{
   if(shouldUserBeBlocked($ip))
   {
       //do sql update/insert to indicate user is blocked in ip_block table or something
       header('HTTP/1.0 401 Unauthorized');
   }
   else
   {
      //update number of requests from this ip address INSERT INTO ip_history (ip, ...) VALUE (:ip, ....);
      //do your web site code

      //maybe do a mysql query to clean out ip_history table for requests that happened a long time ago and check to see if you should unban people
   }
}

您将该代码放在网站的每个页面上,这将确保用户没有违反您的预定安全规则。

答案 1 :(得分:1)

为此使用fail2ban之类的工具。

您可以创建一个规则来阻止请求者的IP地址,例如他们在给定时间内向同一个URL发出过多请求。您可以配置阻止它们的时间跨度。

优点是这种阻塞方式已经在网络级别发生,从而降低了服务器负载。

答案 2 :(得分:1)