Archive for the ‘WordPress’ Category

仅支持域名访问的方法

近期收到一些短信告警,大概意思是说不能通过 ip 直接访问网站。
顺手禁掉,备忘如下:

vi /etc/apache2/sites-available/000-default.conf

添加:

<VirtualHost *:80>
        ServerName xxx.xxx.xxx.xxx
        ServerAlias xxx.xxx.xxx.xxx
        <Directory />
                Order Allow,Deny
                Deny from all
        </Directory>
</VirtualHost>

重启:
/etc/init.d/apache2 restart

爬虫与资源消耗

最近服务器总是告警,大半夜的一连串短信通知。
开始还嘟囔着便宜没好货,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');
    function uicss_search_ban_key() {
        
    add_settings_field('uicss_search_key', 'uicss搜索关键词屏蔽', 'uicss_search_key_callback_function', 'reading');
        
    register_setting('reading', 'uicss_search_key');
    }
    function uicss_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');
    function uicss_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 ($BanKey as $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. 访问指定文件名的:
    <Files ~ ".asp$">
         Order allow,deny
         Deny from all
    </Files>
  6. <FilesMatch ".(asp|htaccess|jsp|rar|zip)$">
     Order allow,deny
     Deny from all
    </FilesMatch>

    <FilesMatch "(wuwu11|xw|xw1|9678|db.init).php">
     Order allow,deny
     Deny from all
    </FilesMatch>
  7. 最后逼不得已,可以把 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 了。

admin-ajax 500

临下班,小客户期望我的 Widgets 能够修改一些内容。
点完 Save 按钮,都准备关机了,却看到菊花转呀转,始终始终保存不上。
得,扔个修改后的 index.html 上去,回家再说吧。

审查元素 Console 报了这个:

[Error] Failed to load resource: the server responded with a status of 500 (Internal Server Error) (admin-ajax.php, line 0)

先用了重启大法、停插件大法,都无效之后。
开始搜 admin-ajax 500 ,结果吐出来一堆垃圾文章。
甚至傻乎乎的照做,重装了 php5-curl 还是解决不了问题。

沉住气,查了一下 error.log (出问题果然还是要先查日志)

[Sun Sep 06 20:51:42.828453 2015] [:error] [pid 2987] [client 211.151.229.101:58371] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 4915229 bytes) in /cuikai/www/html/wp-includes/wp-db.php on line 1173, referer: http://uicss.cn/wp-admin/widgets.php

再去查 wp-db.php on line 1173
得到一个线索,wp升级的时候会产生很多杂七杂八的玩意,导致后台各种慢。
顺藤摸瓜找到一篇 7 年前的文章,是通过直接删数据库冗余的临时解决方案。
略过不表。

说一下怎么治根。

第一步:
打开 wp-includes/taxonomy.php file 跳转到 4448 行

wp_schedule_single_event( ‘wp_batch_split_terms’, time() + MINUTE_IN_SECONDS );
修改为
wp_schedule_single_event( time() + MINUTE_IN_SECONDS, ‘wp_batch_split_terms’ );
以绝后患。

第二步:
创建一个 /wp-content/mu-plugins/fix.php 内容如下:

<?php
function clear_bad_cron_entries() {
    
// Fix incorrect cron entries for term splitting
    
$cron_array = _get_cron_array();
    
if ( isset( $cron_array['wp_batch_split_terms'] ) ) {
        
unset( $cron_array['wp_batch_split_terms'] );
            
_set_cron_array( $cron_array );
    
}
}
clear_bad_cron_entries();

在浏览器地址栏访问一下该文件 uicss.cn/wp-content/mu-plugins/fix.php

ok 大功告成。
捎带着,后台各种操作也变快了,噗哈哈哈。

WordPress后台编辑器快速标签

WordPress后台编辑器里已经内置了一些标签

edButtons[10] = new qt.TagButton('strong','b','<strong>','</strong>','b');
edButtons[20] = new qt.TagButton('em','i','<em>','</em>','i'),
edButtons[30] = new qt.LinkButton(), // special case
edButtons[40] = new qt.TagButton('block','b-quote','\n\n<blockquote>','</blockquote>\n\n','q'),
edButtons[50] = new qt.TagButton('del','del','<del datetime="' + _datetime + '">','</del>','d'),
edButtons[60] = new qt.TagButton('ins','ins','<ins datetime="' + _datetime + '">','</ins>','s'),
edButtons[70] = new qt.ImgButton(), // special case
edButtons[80] = new qt.TagButton('ul','ul','<ul>\n','</ul>\n\n','u'),
edButtons[90] = new qt.TagButton('ol','ol','<ol>\n','</ol>\n\n','o'),
edButtons[100] = new qt.TagButton('li','li','\t<li>','</li>\n','l'),
edButtons[110] = new qt.TagButton('code','code','<code>','</code>','c'),
edButtons[120] = new qt.TagButton('more','more',' <a rel="nofollow" href="http://uicss.cn/wordpress-quicktag/#more-16803" class="more-link">阅读全文 &raquo;</a>
Page 1 of 912345...Last »
崔凯博客
Powered by SinaSAE | Theme by ck web design | TOP 顶部
Copyright © 崔凯 All rights reserved. 蜀ICP备12025891号.