PHP公式,以防止超过IP的HTTP请求

时间:2015-01-27 13:10:41

标签: php security formula brute-force

我打算阻止黑客扫描我的网页,我发明了一个公式来控制一段时间内的平均命中率,这是最好的解决方案吗?

function exceeded(){
  $limit=5;
  $span=15;
  $now=time();
  if($now-$_SESSION['lastDate']>=$span){
     $_SESSION['lastDate']=$now;
     $_SESSION['totalHits']=1;
     return false;
  }
  $_SESSION['totalHits']=($_SESSION['totalHits']*($span-($now-$_SESSION['lastDate'])))/$span;
  $_SESSION['totalHits']+=1; // Adds current Hit
  if($_SESSION['totalHits']<=$limit){
      $_SESSION['lastDate']=$now;
      return false;
   }
   $_SESSION['lastDate']=$now;
   return true;
}
//-----------------------------
if(exceeded()){
  echo 'You have exceeded your request limit come back in 15 seconds';
  exit;
}

1 个答案:

答案 0 :(得分:1)

您仍然要执行需要CPU / RAM / ...的PHP代码,因此更好的方法是限制服务器处理的请求。如果您害怕用户DDoSing您的服务器尝试使用像Cloudflare这样的服务。

如果你正在使用Apache,请阅读mod_evasive,Nginx用户可以limit the rate requests通过。

为什么PHP也不是一个好选择? DDoS工具不会存储cookie,此时您实际上正在使用客户端计算机的存储来记住他的访问。如果你真的想用PHP做,你应该检查用户的IP并使用他的请求的数据库(每次访问时也需要CPU / RAM)。