PHP 防止来自某个 IP 的超过 http 请求的公式
PHP formula to prevent exceeding http requests from an IP
我要防止黑客扫描我的网站页面,我发明了一个公式来控制一段时间内的平均点击率,这是最好的解决方案吗?
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;
}
您仍将执行需要 CPU/RAM/... 的 PHP 代码,因此更好的方法是限制服务器处理的请求。如果您害怕用户对您的服务器进行 DDoSing 攻击,请尝试使用像 Cloudflare 这样的服务。
如果您使用的是 Apache,请继续阅读 mod_evasive, Nginx users can limit the rate requests。
为什么PHP也不是一个好的选择? DDoS 工具不会存储 cookie,此时您实际上是在使用客户计算机的存储来记住他的访问。如果你真的想在 PHP 中这样做,你应该检查用户的 IP 并使用他的请求的数据库(他每次访问时也需要 CPU/RAM)。
我要防止黑客扫描我的网站页面,我发明了一个公式来控制一段时间内的平均点击率,这是最好的解决方案吗?
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;
}
您仍将执行需要 CPU/RAM/... 的 PHP 代码,因此更好的方法是限制服务器处理的请求。如果您害怕用户对您的服务器进行 DDoSing 攻击,请尝试使用像 Cloudflare 这样的服务。
如果您使用的是 Apache,请继续阅读 mod_evasive, Nginx users can limit the rate requests。
为什么PHP也不是一个好的选择? DDoS 工具不会存储 cookie,此时您实际上是在使用客户计算机的存储来记住他的访问。如果你真的想在 PHP 中这样做,你应该检查用户的 IP 并使用他的请求的数据库(他每次访问时也需要 CPU/RAM)。