标签 wordpress 下的文章

“如何处理被黑的wordpress”一文的解释

wordpress的市场占有率很高,但被黑的很多,今天看了“如何处理被黑的wordpress”一文,下面做个解释说明。

被黑后的操作步骤:

一、备份文件及数据库

对于wordpress,文件只需要备份wp-content 下的文件即可,因为你上传的文件都再这个下面

被黑后,原已安装的wordpress文件很有可能已被篡改,所以备份只需备份wp-content下的用户文件,最主要的是上传文件。

二、修改相关密码

  • mysql数据库密码,如果是cpanel,请cpanel删除数据库用户名,然后新建同名用户即可完成密码的修改

  • FTP/cpanel后台管理密码;

  • WP 管理员用户密码;

被入侵后,很有可能保存帐号信息的wp-config.php的内容已泄漏,所以,我们必须修改密码,要修改的密码就包括上了上面三个主要内容。进入cpanel进行删除重建用户是为了更加安全,同时,你也可以检查是否有异常用户名。

三、全新安装 WordPress

1.进 cpanel 后台修改管理员密码,新建全新数据库,新建数据库用户名;

2.把 FTP 备份下到本地后,清空服务器 pulic_html/ 内所有文件,到 http://wordpress.org/ 下载最新版程序(不下中文版,你懂的!),解压到服务器中;

3.访问博客在线安装 WordPress ,新建用户名,修改数据库默认的 wp_ 前缀为 home_ (homez 自己命名一个);

在备份完成后,就可以重新安装wordpress了。在重新安装前,先重建数据库及相关帐号,清空网站目录下所有文件。这里需要注意的是,不要遗漏隐藏文件,比如.htaccess。当然,也可以把public_html目录删除,再重新建立这个目录。

下载最新的wordpress,wordpress老版中的漏洞很多,很容易被黑。

在线安装wordpress的步骤中,有一步中有数据库中表的前缀,缺省为 wp_ ,为安全,必须修改。因为在sql注入入侵时,得猜数据库中的表名,改为一个攻击者不容易猜出来的,当然最好不要用网站名称,比如homezz网站的数据库表前缀就不要用wp或homezz了:-)

四、恢复 SQL 数据:

1.进 phpMyAdmin ,除 mywpcommentmeta、mywpoption、mywpusermeta、mywpusers 不删,其余表全删;

2.导入备份下来的 SQL 到新建的数据库,删除以上 4 个表;

3.记得你刚刚修改过数据表的,所以,记得再phpmyadmin里面修改

这里就是导入你的数据了,需要注意这四个表的数据不要用备份里的数据,因为我们已经使用了全新的帐号了。注意表名前缀的变化。

五、插件、主题及其它文件恢复

1.推荐 WP 后台搜索安装;

2.若要使用备份中的插件、主题,请务必仔细查看各个文件;

3.其它文件回传时请查看是否有新增可疑文件;

插件和主題一定要重新从官方重新下载最新版。如果是自己写得,检查文件内容是否已被篡改再回传。

在wordpress管理后台顶部加一个一键清除所有cos-html-cache插件产生的缓存文件功能

应要求,得在wordpress管理后台顶部加一个一键清除所有cos-html-cache插件产生的缓存文件功能。

cos-html-cache是一款简单高效的wordpress缓存插件,之前写过它的源码简单解读

当更新文章时,缓存文件会自动更新,但是对某些小地方的更新,比如友情链接等功能,这些小地方的更新无法触发cos-html-cache去给所有静态缓存文件更新一遍。

现在因为要对这些小地方较频繁的更新,而为了安全,“仪表盘”中的设置功能不对编辑开放,这样没法提供cos-html-cache自身提供的清除缓存功能。于是就是开放一个单独的清除缓存的链接出来。

想了想,也挺简单的,把cos-html-cache的部分代码提取出来,在functins.php中加上少量代码就可以实现在管理后台的顶部加一个一键清除所有缓存文件的链接了。

实现代码如下:

function conference_admin_bar_render() {
    global $wp_admin_bar;

    if ( !is_user_logged_in()) 
        return false;


    $wp_admin_bar->add_menu( array(
                'parent' => '',
                'id' => 'delete-cache',
                'title' => __( '删除缓存', 'conference-cache' ),
                'meta' => array( 'title' => __( '删除所有缓存文件', 'conference-cache' ) ),
                'href' => wp_nonce_url( admin_url( 'index.php?action=delcachepage&path=' . urlencode( $_SERVER[ 'REQUEST_URI' ] ) ), 'delete-cache' )
                ) );
}
add_action( 'wp_before_admin_bar_render', 'conference_admin_bar_render' );

function admin_bar_delete_cache() {
    // Delete cache for a specific page
    if ( isset( $_GET[ 'action' ] ) && $_GET[ 'action' ] == 'delcachepage' && ( isset( $_GET[ '_wpnonce' ] ) ? wp_verify_nonce( $_REQUEST[ '_wpnonce' ], 'delete-cache' ) : false ) ) {
do_conference_html_cache_action();
        wp_redirect( preg_replace( '/[ <>\'\"\r\n\t\(\)]/', '', $_GET[ 'path' ] ) );
        die();
    }
}
if ( isset( $_GET[ 'action' ] ) && $_GET[ 'action' ] == 'delcachepage' )
   add_action( 'admin_init', 'admin_bar_delete_cache' );

// deal with rebuild or delete
if( !function_exists('ConferenceDelCacheByUrl') ){
    function ConferenceDelCacheByUrl($url) {
        $url = get_home_path().str_replace( get_option('home'),"",$url );
        $url = str_replace("//","/", $url );
         if( file_exists( $url )){
             if( is_dir( $url )) {@unlink( $url."/index.html" );@rmdir($url);}
             else @unlink( $url );
         }
    }
}

function do_conference_html_cache_action(){
        @rename(get_home_path()."index.html",get_home_path()."index.bak");
        @chmod( get_home_path()."index.bak", 0666 );
        global $wpdb;
        $postRes=$wpdb->get_results("SELECT `ID`  FROM `" . $wpdb->posts . "` WHERE post_status = 'publish' AND ( post_type='post' OR  post_type='page' )  ORDER BY post_modified DESC ");
        foreach($postRes as $post) {
            ConferenceDelCacheByUrl(get_permalink($post->ID));
            }
        $msg = __('缓存文件已成功清除','delete-cache');
//  if($msg)
//  echo '<div class="updated"><strong><p>'.$msg.'</p></strong></div>';
}

测试了一下,效果很好。

Wordpress管理工具栏上按钮的清理

在给用户使用时因为特殊需要,把Wordpress管理后台中的评论、页面等内容的管理菜单去掉了。但顶部的管理工具栏上还有评论和新添按钮,可以用来管理这么内容。于是得进一步清理这些按钮。

方法还是在functions.php中加几句代码即可。如下:

// remove links/menus from the admin bar
function conference_admin_bar_render() {
    global $wp_admin_bar;
    $wp_admin_bar->remove_menu('comments');
    $wp_admin_bar->remove_menu('new-content');
//  $wp_admin_bar->remove_menu('get-shortlink');
//  $wp_admin_bar->remove_menu('appearance');
}
add_action( 'wp_before_admin_bar_render', 'conference_admin_bar_render' );

这样,用户在管理时就不会再出现增加修改了不该动的东西了。

给WordPress的TinyMCE编辑器加上中文字体

WordPress自带了网页编辑器TinyMCE,不过这只是个简化版的TinyMCE。为了使用TinyMCE更多的功能,可以自己在functions中增加相关代码,并把简化的TinyMCE所缺失的插件补充上就可以了。当然,我们没必要费这个劲,有现在的插件来帮助我们完成这个事,比如TinyMCE Advanced插件,还有一个是Ultimate TinyMCE,不过这里并不建议使用后者,因为TinyMCE Advanced更稳定,也更干净一些。

装上TinyMCE Advanced后,设置好会发现字体选择列表中没有中文字体。怎么样才能加上中文字体呢?

网上中文网站中比较流行的做法是修改WordPress所带的TinyMCE,大致是修改:

wp-includes/js/tinymce/themes/advanced/editor_template.js

wp-includes/js/tinymce/wp-tinymce.js.gz

后着是解压后修改,再重新打包。

修改的方法是,找到两个文件中themeadvancedfonts的位置,在后面的参数中加入中文字体,如下:

theme_advanced_fonts: '宋体=宋体;黑体=黑体;仿宋=仿宋;楷体=楷体;隶书=隶书;幼圆=幼圆;Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats'

这里要注意的是两个文件必须使用utf-8编码,不然很有可能会乱码。

这种方法是有效的,但有些麻烦,而且在Wordpress升级后,又得来一次。

其实我们可以直接在自己的Wordpress主题的functions.php中进行设置,这样,就只需在一处进行修改了。

- 阅读剩余部分 -

wordpress的缓存插件cos-html-cache的源码解读

之前在“Blog的选择-Wordpress还是Typecho?”说过Wordpress很笨重,所以这里选择了Typecho。因为一些站需要用Wordpress,所以就得上缓存类插件,一般来说直接用WP Super Cache即可,稳定、易用、效率高。

不过,其实Wordpress还有一款效率更高的缓存类插件,那就是cosbeta(江东,东哥)开发的cos-html-cache,关于cos-html-cache,其原理和功能等方面更多的信息见这里

下面简单解读一下cos-html-cache的源码,我不是这款插件的开发者,不保证解读完全正确。

- 阅读剩余部分 -

WordPress 3.4 下自定义登录logo失效的问题

WordPress3.4.2发布了。今天突然发现以前维护的很久都没管的两个网站的登录页面的自定义登录logo失效了。

一查,还真是WordPress更新导致的。

打开模板的模板函数(functions.php),查找:

addaction('loginhead'

定义到自定义登录logo的位置,修改如下:

/*修改后台登录界面logo的图片*/
function custom_login_logo() {
    echo '
      <style type="text/css">
      .login h1 a { 
        background-image:url('.get_bloginfo('template_directory').'/img/login_logo.png) !important;
        background-size:auto;
      }
      </style>
    ';
}
add_action('login_head', 'custom_login_logo');

再检查一下登录logo的标题和对应的链接,没啥问题:

/*修改后台登录界面logo的链接*/
function custom_loginlogo_url($url) {
    return home_url();
}
add_filter( 'login_headerurl', 'custom_loginlogo_url' );

/* 修改后台登录界面logo的标题 */
function custom_login_title() {
    echo get_option('blogname'); 
} 
add_filter('login_headertitle', 'custome_login_title');

保存,重新登录,一切正常了。