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