限制来自php/apache或.htaccess的http请求?
我的网站最近得到了漏洞扫描,我不负责。我试图阻止任何请求超过合理数量的页面的IP。我实际上不确定可能有4-5个请求并阻止它们。限制来自php/apache或.htaccess的http请求?
我已经看到这与光速web服务器完成,但我有apache。如何限制PHP请求到我的页面,如果用户超过了限制,他们被阻止离开我的网站30分钟? (我真的不知道什么是好金额,真正的用户不会被阻止)
重要的事情在这样的解决方案是,实际的“堵”是很资源成本低廉。正确识别攻击者并不意外禁止某人也很重要,但也不要太开放,以免在阻止某人之前浪费了大量资源。
但是,您不是第一个遇到此问题的人。
有一个伟大的apache模块可用,称为mod_evasive,它被配置为做到这一点。
我曾经做了一个非常简单的技术在服务器上(因为它的工作与partuclar应用程序更好),其有一个像这样一个流程:
我的应用程序计数在当地APC缓存,这是关键的变量当天的当前小时和用户IP地址,并检查是否已达到限制。
如果是这样的话,ip地址被写入一个工作日志中,一个cronjob拿起它并使用iptables添加一个过滤器,这样ip包中的包就会被丢弃。
所以他们甚至没有到达网络服务器,并且资源消耗极少。
每天一次添加的规则被清除。
我想我们都知道接下来会发生什么(记住每个文件/图像,等等是一个请求)。
要提出一个替代方案,为什么不简单地一次性阻止一个有问题的IP地址 - 您大概可以从流量日志中获得有问题的IP地址,并且添加“Deny from xxx.xxx.xxx.xxx
”样式很简单IP地址块到您的httpd配置。 (此外,不同于基于PHP的方法,这将适用于图像等为好。)
要做到,否则容易运行妨碍合法的网络流量,谷歌的蜘蛛的风险等
我使用这将阻止自定义IP地址,只需粘贴在脚本中:
<?php
$deny = array("111.111.111", "222.222.222", "333.333.333");
if (in_array ($_SERVER['REMOTE_ADDR'], $deny)) {
header("location: http://www.mywarningpage_or_anywhereyouwouldlike.com/");
exit();
} ?>
要自动阻止某人,您将不得不随时随地创建IP的历史记录。
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$time = time();
$myFile = "ip_log.txt";
$fh = fopen($myFile, 'a') or die("can't open file");
$stringData = $ip.":"$time."\n";
fwrite($fh, $stringData);
fclose($fh);
到现在自动让第一个脚本让我写数组
$ip = $_SERVER['REMOTE_ADDR'];
$ips = file("ip_log.txt")
$count = count($ips);
for ($i=0;$i<=$count;$i++){
if (strpos($ips[$i],$ip)==true){
$teile = explode(" ", $pizza);
$ip_h[] = $teile[0]; // Teil1
$time_h[] = $teile[1]; // Teil2
}
//now you have arrays of the actual users ip with times.
// now set a timeinterval of amount of requests you define as "spam"
// and check with if for through array to deny similar like first script
没有测试