如何阻止不良身份不明的机器人抓取我的网站?

时间:2012-03-30 11:44:32

标签: search-engine bots

我如何抵制不明身份的黑客机器人抓取我的网站?一些名字在Apache的cPanel中不存在的坏机器人正在严重访问我的网站带宽。

我曾在batgap.com/robots.txt上尝试过robots.txt,并且还使用.htaccess阻止,但带宽使用情况没有任何改善。我不知道那些机器人的IP因此无法通过IP地址阻止它们。这些机器人消耗了过多的站点带宽,因此我需要从服务器增加它。

4 个答案:

答案 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();}
          }
        }
   }

// ---------------------------------------------------------------------------------------------------------------
?>