0
0

爬虫与资源消耗

崔凯 发表于 2018年06月27日 14:25 | Hits: 555
Tag: WordPress | .htaccess | wordpress

最近服务器总是告警,大半夜的一连串短信通知。
开始还嘟囔着便宜没好货,1核1G 的机器凑合着过吧。
忍了又忍,每次重启完,过不了几天就死了。只好抽时间看一下。
拿到 access.log ,初步分析是 404 的页面和 search 结果页被吃尽了资源。

一个是被爬虫爬了无数次。
一个是被恶意广告搜了无数次。

爬虫的好处理:
  1. 先调整了 robots.txt,让听话的爬虫别爬我废弃的目录:

    User-agent: *
    Disallow: /xxxx/xxxx/

  2. 不听话的没办法,限制了几个 IP ,手动的:

    order allow,deny
    deny from 46.229.168.65
    deny from 46.229.168. 121.224.143. (限制 IP 段,空格分开)
    allow from all

  3. 然而懒得总是查 IP ,得,直接屏蔽掉 xxxx 整个目录:

    order allow,deny
    deny from all

  4. 目录外的文件 301 指向首页,谁都别访问了:
    <?php
    header("HTTP/1.1 301 Moved Permanently");
    header("Location:http://uicss.cn");
    ?>
恶意搜索广告:

这个麻烦点,我也不能屏蔽掉搜索功能,毕竟自己还要用。

  1. 还是先告诉懂事的爬虫,别爬这些链接:

    Disallow: /search/*
    Disallow: /?s=
    Disallow: /index.php?s=

  2. 然后在模板的 function.php 里,加入个搜索的限制:
    add_action('admin_init','uicss_search_ban_key');
    functionuicss_search_ban_key(){
        add_settings_field('uicss_search_key','uicss搜索关键词屏蔽','uicss_search_key_callback_function','reading');
        register_setting('reading','uicss_search_key');
    }
    functionuicss_search_key_callback_function(){
        echo'<textarea name="uicss_search_key" rows="10" cols="50" id="uicss_search_key" class="large-text code">'.get_option('uicss_search_key').'</textarea>';
    }
    add_action('template_redirect','uicss_search_ban');
    functionuicss_search_ban(){
        if(is_search()){
            global$wp_query;
            $uicss_search_key=get_option('uicss_search_key');
            if($uicss_search_key){
                $uicss_search_key=str_replace("\r\n","|",$uicss_search_key);
                $BanKey=explode('|',$uicss_search_key);
                $S_Key=$wp_query->query_vars;
                foreach($BanKeyas$Key){
                    if(stristr($S_Key['s'],$Key)!=false){
                        wp_die('请不要搜索非法关键字');
                    }
                }
            }
        }
    }

    上传好之后,在后台可以配置一些关键词,例如:
    www com net 杏彩,一行一个,禁止搜索这些词。

  3. 再然后,读 log 发现,这些恶意搜索都是无 referer 的直接流量,那我可以改 search.php 的头一行,加个域的判断就好了:
    <?php
    $host=$_SERVER['HTTP_REFERER'];
    if(substr($host,0,16)!='http://uicss.cn/'){
        header("location:http://uicss.cn/a/go-away.html");
        exit;
    }//是自己人再去读数据库,加载 header,不是自己人的请走开。
    get_header();
    ?>
  4. 有来源的这么搞:

    RewriteEngine on
    RewriteCond %{HTTP_REFERER} laobiao\.php [NC,OR]
    RewriteCond %{HTTP_REFERER} xxxx\.org
    RewriteRule .* - [F]

  5. 最后逼不得已,可以把 user agent 符合的全拒绝掉。(他们假装正常用户也是让人烦躁)
    配合着 user-agent Switcher 试了半天,原来各种符号全都需要转义,不仅是空格和点,连括号都要转,真是费劲:

    RewriteCond %{HTTP_USER_AGENT} "Mozilla/5\.0\ \(Macintosh\;\ Intel\ Mac\ OS\ X\ 10_12_4\)\ AppleWebKit/537\.36\ \(KHTML,\ like\ Gecko\)\ Chrome/57\.0\.2987\.133\ Safari/537\.36"

折腾了好几通,继续观察 ing
注意,折腾的时候找个测试目录玩,自己把自己搞挂了无数次,一个空格没转义就整站 500 了。

相关日志:

原文链接: http://uicss.cn/bad-bot/

0     0

评价列表(0)