22个或许您不知道的 wordpress 安全技巧(上)

/

22个或许您不知道的 wordpress 安全技巧(上)

wordpress 是目前最流行的 cms,安全问题不容小觑,忽视了就会给黑客们以可趁之机。下面列出的是22个或许您不知道的 wordpress 安全技巧,能够帮助提升您 wordpress 站点的安全性。

1、去除 wordpress 页面 meta 信息中的 wordpress 版本号。

您应该自豪的在 wordpress 页面的页脚留下 Powered by Wordpress,因为 wordpress 真的是一个伟大的 cms 软件,自从有了 wordpress,写博客变得从来没有这么容易。但是在页面的 meta 信息中留下 wordpress 版本号绝对不是明智之举,因为很多怀有恶意的黑客通过 google 能搜索到某一特定具有 bug 的 wordpress 版本而施以 0-day 攻击。

解决方法:在您 wordpress 主题的 functions.php 中添加如下内容:

function remove_version() {
	return '';
}
add_filter('the_generator', 'remove_version');

2、删除 readme.html。

wordpress 根目录下的 readme.html 包含了 wordpress 的版本信息,从第1条安全技巧得知,这将造成潜在的安全隐患。

解决方法:很简单,删除它。

3、去除 http 头信息中的 php 版本号和使用的 web 服务器软件信息。

跟暴漏 wordpress 版本号一样,暴漏 php 的版本号同样存在一定的安全隐患。设置为不显示会更加安全。

解决方法:联系您的主机服务商设置为不显示 php 版本号,或者您也可以尝试在 .htaccess 中添加如下内容:

Header unset X-Powered-By
Header unset Server

不起作用?那是因为您的主机没有安装 mod_headers 模块。一般共享的虚拟主机无法自行配置 php 模块,VPS 则不同,有着更高的弹性,可以自行配置。

4、不要使用默认的 admin 作为管理员用户名,新建一个代替。

假如一些人猜测您 wordpress 站点的用户名和密码,总是会从 admin 开始。admin 作为默认的管理员用户名被太多的站点滥用,所以最好用其它用户名代替。

解决方法:新建用户作为管理员,避免以诸如“root”、“god”、“null”等易猜测的名字作为管理员用户名,在新建用户后,删除 admin 用户,将 作者为 admin 的文章、页面的作者信息更改为这个新建的用户。

5、去除不必要的 wordpress 登陆失败的提示信息。

默认 wordpress 登陆失败后的提示信息很详尽,会告诉您是用户名错了,还是密码错了,黑客可以很容易的发现您站点中存在的用户名,采用暴力方式来破解密码。

解决方法:很简单,将 wordpress 登陆失败后的提示信息更改为“您的用户名或密码错误”,而对任何具体情形不作区分。

function wrong_login() {
	return 'Wrong username or password.';
}
add_filter('login_errors', 'wrong_login');

6、设置 wordpress 的安全密钥信息。

安全密钥用于对存储在用户 cookie 中的信息和密码进行加密。您不必记得安全密钥,事实上一旦设置好,您以后可以不用再管了。

安全密钥在 wp-config.php 中的45-52行进行定义, wordpress 提供了一个强大的脚本来生成它。生成后就像下面这样:

define('AUTH_KEY',         '  <_54XvuK^#F/G<cslQriO~|t8D|bBBr/Gcp=RG3iAdI Q`lPoTC2Y*,_B x}uN');
define('SECURE_AUTH_KEY',  'J&zMeeTh@kEuGN|M}Y :B>kSrIJ!BVbJ!T`N7YpxHs/}?##zcP7NVC6PnKRiyNR)');
define('LOGGED_IN_KEY',    '!%(7/})Zr=PZ<HwA.<RH` ty#(1.?F=ZQ,e8qE!T/Rxih&w<p#VE=uw;u3_DjfbH');
define('NONCE_KEY',        '>c q  kXR?/.mPKj z%=zJ-|%H(0Xkoa)5 N(!3yninBLo!qoP[&<>biTq<Y%9G%');
define('AUTH_SALT',        'No!(HRP_9JV$Q5Q#UP%xf0=iRfvG,Ob9.L-0^,59hL,@:u.A5L3|2CtVGDz-4sJb');
define('SECURE_AUTH_SALT', '-T#d&qwqt$})u&_[d|(`3N`8:{I4mxATFX&nGY@R? y~n7fv2|Wd 4!*iI||,hnN');
define('LOGGED_IN_SALT',   'kl&Y=3SH~j@.LlY`gD7EKh^K28Cd/(T YUN7Pv~t3I|!`|8 T;I*~-hm-&P2{!be');
define('NONCE_SALT',       '=JpOp,Y{ZZ(DW>zrJ:<}]@get*-`Y-th<g/-Rakf;fbJ,i5jY?9 Y}; 8RopaUU9');

在大多数情况下数据库的调试模式都是被插件开启的,所以唯一关闭它的方法是逐一关闭插件发现是哪一个插件开启了数据库的调试模式。

11、关闭 javascript 的调试模式。

wordpress 的 javascript 调试模式在 wp-config.php 中开启或关闭,找到

define('SCRIPT_DEBUG', true);

注释它,删除它,或者改变为

define('SCRIPT_DEBUG', false);

假如您的站点在做了上述改变后调试模式仍然没有关闭,意味着有插件开启了调试模式,逐一关闭插件发现是哪一个插件出了问题。

Comments