我如何抵制不明身份的黑客机器人抓取我的网站?一些名字在Apache的cPanel中不存在的坏机器人正在严重访问我的网站带宽。
我曾在batgap.com/robots.txt上尝试过robots.txt,并且还使用.htaccess阻止,但带宽使用情况没有任何改善。我不知道那些机器人的IP因此无法通过IP地址阻止它们。这些机器人消耗了过多的站点带宽,因此我需要从服务器增加它。
答案 0 :(得分:3)
我来自Incapsula,我们定期处理坏机器人。
我们最近发布了一项与机器人相关的研究,提供了问题范围的见解(http://www.incapsula.com/the-incapsula-blog/item/225-what-google-doesnt-show-you-31-of-website-traffic-can-harm-your-business),根据这些数据,我必须同意@Leonard Challis - 你根本无法处理机器人手动保护。
话虽如此,有机器人保护解决方案,甚至免费的(包括我们)可以帮助你解决坏机器人。
BTW - 就像你提到的那样,坏机器人访问的一个副产品是带宽损失。 我们最近意识到巨大的与机器人相关的带宽使用有多么令人惊讶。 这本身就是一个有趣的话题。 我们相信,通过避免糟糕的机器人流量,托管服务提供商实际上可以大大提高他们的效率(希望使用它来降低成本或改善服务)。一旦你想象出社交和商业的含义,你就可以理解这个糟糕的机器人问题的真实范围,而不仅仅是造成的直接损害。答案 1 :(得分:1)
不幸的是,robots.txt有时会被这些“坏机器人”忽略,但如果问题更多的是真正的搜索引擎蜘蛛,你不想看到他们应该考虑到它。我用CPanel假设您可以进入Web服务器(apache)日志?在那里你可以找到两件事:IP和User-Agent。你可以在那里找到罪魁祸首并将它们添加到你的robots.txt和.htaccess中。请注意,拒绝IP地址的.htaccess规则远比依赖robots.txt好得多,因为您正在从机器人创建者的手中做出选择。
如果您知道正在执行此操作的特定机器人,您应该能够从论坛获取IP地址和用户代理,但如果这是一个更普遍的事情,那么我真的害怕它更像是一个手动工作。
还有其他方法可以使用不同的效果,例如mod_security(http://www.askapache.com/htaccess/modsecurity-htaccess-tricks.html),但这意味着你必须访问你的Web服务器配置。
最后,您可以检查指向您网站的链接(使用google上的链接:选项)。有时,如果你在垃圾论坛或类似网站上有链接,这可能会增加机器人来抓你的机会。也许你可以在apache日志中查看referer URL - 但这都是基于很多假设的,如果它有很好的效果你可能会很幸运。
答案 2 :(得分:1)
我使用PHP阻止'坏机器人'。 我主要是在IP地址中过滤,然后是User-Agent。 我让“坏机器人”等待长达999秒,然后返回一个非常小的网页。 通常(总是)互联网连接超时并返回零(0)字节。 最重要的是,在到达下一个受害者之前,我已将他们推迟了几分钟。 http://gelm.net/How-to-block-Baidu-with-PHP.htm
答案 3 :(得分:1)
通过PHP阻止不需要的机器人/蜘蛛访客
<强>说明:强>
将以下PHP代码放在index.php文件的开头。
这里的想法是将代码放在主站点的PHP主页中,这是该站点的主要入口点。
如果您有其他直接通过URL访问的PHP文件(不包括PHP包含或需要支持类型文件),请将代码放在这些文件的开头。 对于大多数PHP站点和PHP CMS站点,root的index.php文件是该站点的主要入口点的文件。
请注意,您的网站统计信息(即AWStats)仍会记录未知机器人下的点击数(由&#39; bot&#39;后跟空格或以下字符之一_ + :,。; / - ),但这些机器人将无法访问您网站的内容。
<?php
// ---------------------------------------------------------------------------------------------------------------
// Banned IP Addresses and Bots - Redirects banned visitors who make it past the .htaccess and or robots.txt files to an URL.
// The $banned_ip_addresses array can contain both full and partial IP addresses, i.e. Full = 123.456.789.101, Partial = 123.456.789. or 123.456. or 123.
// Use partial IP addresses to include all IP addresses that begin with a partial IP addresses. The partial IP addresses must end with a period.
// The $banned_bots, $banned_unknown_bots, and $good_bots arrays should contain keyword strings found within the User Agent string.
// The $banned_unknown_bots array is used to identify unknown robots (identified by 'bot' followed by a space or one of the following characters _+:,.;/\-).
// The $good_bots array contains keyword strings used as exemptions when checking for $banned_unknown_bots. If you do not want to utilize the $good_bots array such as
// $good_bots = array(), then you must remove the the keywords strings 'bot.','bot/','bot-' from the $banned_unknown_bots array or else the good bots will also be banned.
$banned_ip_addresses = array('41.','64.79.100.23','5.254.97.75','148.251.236.167','88.180.102.124','62.210.172.77','45.','195.206.253.146');
$banned_bots = array('.ru','AhrefsBot','crawl','crawler','DotBot','linkdex','majestic','meanpath','PageAnalyzer','robot','rogerbot','semalt','SeznamBot','spider');
$banned_unknown_bots = array('bot ','bot_','bot+','bot:','bot,','bot;','bot\\','bot.','bot/','bot-');
$good_bots = array('Google','MSN','bing','Slurp','Yahoo','DuckDuck');
$banned_redirect_url = 'http://english-1329329990.spampoison.com';
// Visitor's IP address and Browser (User Agent)
$ip_address = $_SERVER['REMOTE_ADDR'];
$browser = $_SERVER['HTTP_USER_AGENT'];
// Declared Temporary Variables
$ipfound = $piece = $botfound = $gbotfound = $ubotfound = '';
// Checks for Banned IP Addresses and Bots
if($banned_redirect_url != ''){
// Checks for Banned IP Address
if(!empty($banned_ip_addresses)){
if(in_array($ip_address, $banned_ip_addresses)){$ipfound = 'found';}
if($ipfound != 'found'){
$ip_pieces = explode('.', $ip_address);
foreach ($ip_pieces as $value){
$piece = $piece.$value.'.';
if(in_array($piece, $banned_ip_addresses)){$ipfound = 'found'; break;}
}
}
if($ipfound == 'found'){header("location: $banned_redirect_url"); exit();}
}
// Checks for Banned Bots
if(!empty($banned_bots)){
foreach ($banned_bots as $bbvalue){
$pos1 = stripos($browser, $bbvalue);
if($pos1 !== false){$botfound = 'found'; break;}
}
if($botfound == 'found'){header("location: $banned_redirect_url"); exit();}
}
// Checks for Banned Unknown Bots
if(!empty($good_bots)){
foreach ($good_bots as $gbvalue){
$pos2 = stripos($browser, $gbvalue);
if($pos2 !== false){$gbotfound = 'found'; break;}
}
}
if($gbotfound != 'found'){
if(!empty($banned_unknown_bots)){
foreach ($banned_unknown_bots as $bubvalue){
$pos3 = stripos($browser, $bubvalue);
if($pos3 !== false){$ubotfound = 'found'; break;}
}
if($ubotfound == 'found'){header("location: $banned_redirect_url"); exit();}
}
}
}
// ---------------------------------------------------------------------------------------------------------------
?>