如何更好的保证WordPress的安全(详细安全设置)

2012-6-25 15:53:37 来源:本站原创,请勿转载 浏览:575
WordPress是一款PHP+Mysql环境的博客平台,用户可以在服务器上架设自己的网志,也可以把他当做一个CMS(内容管理系统)来使用,由于它的开源性、使用性和功能的强大,已成为目前用户最多的博客系统,虽然随着WordPress不断更新其安全性也不断的提高,但是我们还是得做好自身的安全设置,以免重要文件泄露,造成不可估量的损失。本文就为大家介绍一下如何做好WordPress的安全设置。

一、WordPress简介:

  WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL 数据库的服务器上架设自己的网志。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在GNU通用公共许可证下授权发布。目前最新版本为2012年04月21日的3.3.2版。 WordPress 被认为是Michel Valdrighi所开发的网志平台b2/cafelog的正式继承者。“WordPress”这个名字出自 Christine Selleck 的主意,他是主要开发者Matt Mullenweg的朋友。

二、为什么WordPress需要做安全设置及安全设置简介:

WordPress大家都知道由于它功能强大及易用和开源,已经拥有了众多的用户,现已成为使用者最多的博客系统,用户一般都会将WordPress当做CMS使用,所以它的安全设置就显得非常重要了。

WordPress安全设置简介:

1、安装时不要使用默认的数据库前缀,在wp-config.php里$table_prefix处修改。

2、访问 http://api.wordpress.org/secret-key/1.1/,然后把自动生成的代码复制下来并覆盖 wp-config.php 文件里面的对应内容。

3、安装或每次升级后记得删除install.php文件。

4、安装后创建一个新管理用户,并取一个不相关的昵称,删掉默认的admin。

5、修改模板里的header.php文件,将里面关于WordPress的版本信息都删除,以防被搜索到。

6、检查各个目录权限设置,去掉不必要的权限。尤其防止出现列表显示,可通过更改服务器设置、htaccess文件、放置空index.html解决。

7、robots.txt里加入 Disallow: /wp-* ,以防后台文件被某些SB搜索引擎索引。

8、如非必要,尽量少安装插件,插件情况非常复杂,出现安全问题的概率比较大。

9、安装Login Lockdown或者Limit Login Attempts插件,防止后台暴力猜解。

10、安装数据库备份插件,如WP-DB-Backup,定期备份数据库,并定期压缩备份wp-content文件夹。

11、设置完成后可以用WP Security Scan 插件来监测自己的网站是否有风险,检查完后禁用即可。

12、如果博客空间是在国内(博客类实在不适合放国内),建议安装留言过滤插件/关键字过滤插件,做好自我保护。

三、WordPress安全设置详解:

1、去掉wordpress版本号信息

wp-includes/general-template.php第2204行 $gen = ‘<meta name=”generator” content=”WordPress ‘ . get_bloginfo( ‘version’ ) . ‘” 去掉里面所有版本号信息

2、删除下面文件里面的版本信息

wp-admin/includes/export.php 这里是订阅页面,还要删除wp-includes/general-template.php里面的所有信息,否则一样显示

wp-admin/admin-footer.php <p id=”footer-upgrade”><?php echo $upgrade; ?></p>

3、禁止访问wp-includes文件夹和wp-admin文件夹

apache的用户,可通过.htaccess来实现,其他用户可通过在该文件夹下面建立一个空白html文件,再加上rewrite规则实现。

apache设置方法:

# Block the include-only files.

RewriteEngine On

RewriteBase /

RewriteRule ^wp-config\.php - [F,L]

RewriteRule ^wp-admin/includes/ - [F,L]

RewriteRule !^wp-includes/ - [S=3]

RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]

RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]

RewriteRule ^wp-includes/theme-compat/ - [F,L]

4、删除掉所有插件的附带信息,避免有心人利用插件漏洞来入侵,最好也禁止访问wp-content下面的plugins文件夹和themes文件夹,方法如上一步。

5、删除后台首页版本号和主题信息

wp-admin/includes/dashboard.php,删除掉下面这段代码

 echo “\n\t”.’<div>’;

 $ct = current_theme_info();

  echo “\n\t<p>”;

 if ( !empty($wp_registered_sidebars) ) {

  $sidebars_widgets = wp_get_sidebars_widgets();

  $num_widgets = 0;

  foreach ( (array) $sidebars_widgets as $k => $v ) {

   if ( ‘wp_inactive_widgets’ == $k )

    continue;

   if ( is_array($v) )

    $num_widgets = $num_widgets + count($v);

  }

  $num = number_format_i18n( $num_widgets );

  $switch_themes = $ct->title;

  if ( current_user_can( ‘switch_themes’) ) {

   echo ‘<a href=”themes.php”>’ . __(‘Change Theme’) . ‘</a>’;

   $switch_themes = ‘<a href=”themes.php”>’ . $switch_themes . ‘</a>’;

  }

  if ( current_user_can( ‘edit_theme_options’ ) ) {

   printf(_n(‘Theme <span>%1$s</span> with <span><a href=”widgets.php”>%2$s Widget</a></span>’, ‘Theme <span>%1$s</span> with <span><a href=”widgets.php”>%2$s Widgets</a></span>’, $num_widgets), $switch_themes, $num);

  } else {

   printf(_n(‘Theme <span>%1$s</span> with <span>%2$s Widget</span>’, ‘Theme <span>%1$s</span> with <span>%2$s Widgets</span>’, $num_widgets), $switch_themes, $num);

  }

 } else {

  if ( current_user_can( ‘switch_themes’ ) ) {

   echo ‘<a href=”themes.php”>’ . __(‘Change Theme’) . ‘</a>’;

   printf( __(‘Theme <span><a href=”themes.php”>%1$s</a></span>’), $ct->title );

  } else {

   printf( __(‘Theme <span>%1$s</span>’), $ct->title );

  }

 }

 echo ‘</p>’;

update_right_now_message();

echo “\n\t”.’<br /></div>’;

6、登陆页装上login-lockdown插件,避免暴力破解用户密码,如果开放会员注册功能,请按下面的方法修改登陆页,否则请把根目录下面的wp-login.php改名后,丢到其他你自己知道的文件夹里面,然后修改这个登陆文件相关地址,很简单,一般直接用你的新地址全部替换wp-login.php这个地址差不多了。最后还要修改wp-includes/general-template.php第215行,这里是后台点退出后跳转到的地址,修改成登陆页新地址。

开放会员注册,就要防止其他用户恶意修改密码。在找回密码的页面,要求同时输入用户名和邮箱,这样比较保险。方法如下:

wp-login.php 第391行,多加一行。

 <p>

  <label><?php _e(‘Username’) ?><br />

  <input type=”text” name=”user_login” id=”user_login” value=”" size=”20″ tabindex=”10″ /></label>

 </p>

 <p>

 <label><?php _e(‘E-mail:’) ?><br />

  <input type=”text” name=”user_login” id=”user_login” value=”" size=”20″ tabindex=”10″ controlName=”email” dataType=”user_login” /></label>

 </p>

传递方式后面加上method=”post” onsubmit=”return validator(this);”

上面加上检测email脚本

<script language=”javascript” type=”text/javascript”>

String.prototype.isEmpty = function () {

    return !(/.?[^\s ]+/.test(this));

}

String.prototype.isBetween = function (val, min, max) {

    return isNaN(val) == false && val >= min && val <= max;

}

String.prototype.getBetweenVal = function (what) {

    var val = this.split(‘,’);

    var min = val[0];

    var max = val[1] == null ? val[0] : val[1];

    if (parseInt(min) > parseInt(max)) {

        min = max;

        max = val[0];

    }

    return what == ‘min’ ? (isNaN(min) ? null : min) : (isNaN(max) ? null : max);

}

var validator = function (formObj) {

    this.allTags = formObj.getElementsByTagName(‘*’);

    this.reg = new Object();

    this.reg.user_login = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;

    this.tip = new Object();

    this.tip.user_login = ‘ Is not a valid e-mail format’;

    this.getControlName = function ()

    {

        return this.element.getAttribute(‘controlName’) == null

               ? ‘The value of the specified control’

               : this.element.getAttribute(‘controlName’);

    }

    this.setFocus = function (ele) {

        try {

            ele.focus();

        } catch (e){}

    }

    this.setBorderColor = function (ele) {

        var borderColor = ele.currentStyle ?

                          ele.currentStyle.borderColor :

                          document.defaultView.getComputedStyle(ele, null)['borderColor'];

        ele.style.borderColor = ‘#ff9900′;

        ele.onkeyup = function () {

            this.style.borderColor = borderColor;

        }

    }

    //输出错误反馈信息

    this.feedback = function (type) {

        try {

            var msg = eval(‘this.tip.’ + type) == undefined ?

 

                      type :

                      this.getControlName() + eval(‘this.tip.’ + type);

        } catch (e) {

            msg = type;

        }

        this.setBorderColor(this.element);

        alert(msg);

        this.setFocus(this.element);

    };

    this.validate = function () {

        var v = this.element.value;

        var dataType = this.element.getAttribute(‘dataType’);

        if (!v.isEmpty() && dataType != null &&  dataType.toLowerCase() != ‘password’) {

            dataType = dataType.toLowerCase();

            try {

                if (!(eval(‘this.reg.’ + dataType)).test(v)) {

                    this.feedback(dataType);

                    return false;

                }

            } catch(e) {

                this.feedback(‘unknow’);

                return false;

            }

        }

 

        return true;

    };

    this.init = function () {

        for (var i=0; i<this.allTags.length; i++) {

            if (this.allTags[i].tagName.toUpperCase() == ‘INPUT’

                this.allTags[i].tagName.toUpperCase() == ‘SELECT’

                this.allTags[i].tagName.toUpperCase() == ‘TEXTAREA’)

            {

                this.element = allTags[i];

                if (!this.validate())

                    return false;

            }

        }

    };

    return this.init();

}

</script>

如果有心人浏览器禁用js脚本,那就只能通过修改php程序来实现了。

7、必须要尽全力保护好wp-config.php这个文件

先要先禁止搜索引擎收录wp-开头的文件和文件夹,尤其要记得这一步,否则在你配置服务器的时候,如果php环境不能立即配置好,那别人访问的时候,很可能直接显示wp-config.php的代码,你的网站数据库信息被搜索引擎收录,你说是好还是坏呢?

其次要禁止访问这个文件,可通过.htaccess或rewrite实现,有能力的最好改名,然后丢到一个别人不知道的文件夹里面。

8、开始安装wordpress的时候,为了防止黑客暴力破解后台密码,最好还是不要使用默认的admin帐号。修改默认帐号的方法可以通过mysql命令行执行命令:

mysql> UPDATE wp_users SET user_login = 'newuser' WHERE user_login = 'admin'。

9、即时跟进更新,包括插件更新:wordpress每更新一次,大都会伴随着程序漏洞的修补和安全问题的解决,所以非常有必要及时地更新到最新版本,以免黑客利用旧版本已发现的漏洞进行入侵。

10、设置复杂的密码:提高安全意识可以避免许多潜在的安全隐患,比如密码的选取。我们有必要为wordpress后台选取一个强口令,以防止被破解。

一个强口令包括:

1)至少有15个字符

2)包含大写字母

3)包含小写字母

4)包含数字

5)包含特殊符号,如` ! ” ? $ ? % ^ & * ( ) _ – + = { [ } ] : ; @ ‘ ~ # | < , > . ? /

6)不能与上次密码相似

7)不能包含你的名字

8)不能包含你朋友的名字

9)不能包含家庭成员的名字

10)不能包含你的生日,手机,身份证等信息

11、数据备份:完成以上这些设置还不够,我们还必须周期性的对数据进行备份,以便数据丢失或黑客挂马时能迅速地恢复。

(0)
(0)