最近 WordPress 安全问题被小编我所关注着,我们如何做才能最大程度上保护我们的 WordPress 程序不被黑客所攻击?可能很多技术大牛都习以为常了,但是毕竟还是有很多菜鸟不知道的,本帖为一篇 WordPress 安全防护的扫盲贴吧,帮助大家尽可能的提升 WordPress 程序的安全性! !
这里面小编整理了几个方面:
wo-login 文件
WordPress 自身系统来说,最直接的危害就是 wp-login.php 这个后台路径已经不在是什么秘密了,最好的解决方法无非也就是如何把这个后台路径给屏蔽或替换一个更隐蔽的地址,这里小编就说些最简单,小白也能够看懂的方法:
一、首先找到 WordPress 根目录下的 wp-login.php 文件,用代码编写软件打开,编辑里面代码,搜索 wp_shake_js 找到
- if ( $shake_error_codes && $wp_error->get_error_code() && in_array( $wp_error->get_error_code(), $shake_error_codes ) )
- add_action( 'login_head', 'wp_shake_js', 12 );
在这段?> 的下一行加入代码
- <?php
- if($_GET["aa"]!="bb"){
- header('Location: http:
- }
- ?>
其中 aa 、 bb 替换为自己的内容,然后 WordPress 后台的地址就变成了 http://www.2zzt.com/ wp-login.php?aa=bb 结构了,这就成了您 WordPress 后台的唯一路径,其他路径均跳转到首页了!当然这个代码也可以放在主题的文件里,这样每次 WordPress 更新就不需要再修改一次了, 在主题文件下找到 functions.php,将下面代码加入即可得到同样的效果!
- add_action('login_enqueue_scripts','login_protection');
- function login_protection(){
- if($_GET['aa'] != 'bb')header('Location: http:
- }
但是话说回来,我们仔细研究下 WordPress 的登陆文件会发现,其实 WordPress 的登陆是采用 post 的方式来提交登陆参数的,所以说,即使我们做了后台地址的隐藏,但是通过 post 提交还是可以登陆到 WordPress 的后台,那么这样我们该如何做呢?
解决方法只有把 WordPress 转移到子目录下,操作方式是
a 、 WordPress 后台-设置-常规下 WordPress 地址 (url) 换成 http://www.2zzt.com/aaa(aaa 为我们自己设置的,是没有人知道的)
b 、在我们的网站根目录下创建一个 aaa 文件夹 (aaa 为上面所说的名称),然后将根目录下的所有文件 (除了 index.php 、 robots.txt 以及.htaccess 外) 的所有文件转移到这个 aaa 文件夹下, 那么我们现在的登陆后台就变成了 http://www.2zzt.com/aaa/wp-login.php,而 aaa 是没有人知道的地址。。。
WordPress 搬到子目录后还要将根目录下 index.php 文件内容
- require('./wp-blog-header.php');
修改为:
- require('./aaa/wp-blog-header.php');
小编不得不提示下,这里的 aaa 是你们自己设置的子目录的名称,要活学活用哈!
这样一来,后台地址隐藏了,且无法通过 post 来提交登陆信息了。。。这是黑客也无从下手的节奏啊!
后台帐号 admin
为了更加的安全,建议大家或者说一定不要将 admin 还作为网站管理帐号登陆,这给暴力破解带来了方便。同时,通过?author=$id 也可以很简单的爆出我们的管理帐号,例如:222.com/?author=*(*号为 1-9999 数字) 即可轻而易举的爆出我们的管理帐号,有了帐号再加上市面上的密码字典,那破解也只是时间问题了,解决方法是在 functions.php 文件里添加一下一下代码:
- add_filter( 'request', 'v7v3_author_link_request' );
- function v7v3_author_link_request( $query_vars ) {
- if ( array_key_exists( 'author_name', $query_vars ) ) {
- global $wpdb;
- $author_id=$query_vars['author_name'];
- if ( $author_id ) {
- $query_vars['author'] = $author_id;
- unset( $query_vars['author_name'] );
- }
- }
- return $query_vars;
- }
- add_filter( 'author_link', 'v7v3_author_link', 10, 2 );
- function v7v3_author_link( $link, $author_id) {
- global $wp_rewrite;
- $author_id = (int) $author_id;
- $link = $wp_rewrite->get_author_permastruct();
- if ( emptyempty($link) ) {
- $file = home_url( '/' );
- $link = $file . '?author=' . $author_id;
- } else {
- $link = str_replace('%author%', $author_id, $link);
- $link = home_url( user_trailingslashit( $link ) );
- }
- return $link;
- }
这样重写后即可改变作者页面的链接方式了。
wp-admin 目录
这个问题延伸出一个更为深点的问题,那就是我们如何把 wp-admin 目录也保护起来呢?小编给的方法虽然有点麻烦,但是绝对很安全,那就是在 wp-admin 目录下新建个.htaccess 让只有你一个 IP 能够访问,这个方法麻烦就麻烦在如果你的网是动态 IP,那么就要进.htaccess 修改一次 IP,才可访问,但是这方法也绝对够安全了。.htaccess 的内容为:
- order deny, allow
- allow from 888.888.888.8888 #Your IP Address
- deny from all
换为自己的 IP 即可,那么 wp-admin 目录只有你一人可以访问了!说到这,后台目录路径的问题安全了!
WordPress 头部信息
隐藏头部不必要出现的信息,例如 WordPress 版本号等等,暴力攻击者掌握了我们的 WordPress 版本号后就可以根据目前已知漏洞进行攻击了,解决的方法是在我们的主题文件夹的 functions.php 内添加下面信息,以方便隐藏了 WordPress 不必要出现的信息,也给网站优化方面带来好处!
- remove_action('wp_head','wp_generator');
- remove_action('wp_head','rsd_link');
- remove_action('wp_head','wlwmanifest_link');
- remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );
- remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0 );
- remove_action('wp_head', 'rel_canonical' );
绝对路径泄漏修复
WordPress 系统自身来说,有 4 个文件会暴漏出网站所在服务器下的绝对路径,这个信息如果被恶意利用,那后果也是很严重的!为了不被别人发现我们的网站绝对路径,我们需要对以下四个文件进行操作,分别是:
- 1 、/wp-includes/registration-functions.php
- 2 、/wp-includes/user.php
- 3 、/wp-admin/admin-functions.php
- 4 、/wp-admin/upgrade-functions.php
解决方法就很简单了,分别打开这几个文件,然后在文件的头部的<?php 下一行添加
即可屏蔽报错,其实还有一个地方会报错,那么就是我们 WordPress 主题的目录文件下的 index.php 里面,最好也加上这个代码!!!
当然我们如果用的是服务器,而不是虚拟主机的话,也最好到服务器下的 php.ini 文件里关闭 php 报错,一般 php.ini 文件的路径在/usr/local/php/etc 下,修改 php.ini 文件内 display_errors = off 即可屏蔽整个服务器的 php 报错!
说到这,我们的 WordPress 应该已经十分的强悍了,至少常见问题都已经解决,山外有山,人外有人这也是没有办法的,最后小编建议大家如果是在用服务器 VPS 的情况下,尽量少开端口,一般开个 80 和 22 端口即可!端口越多,漏洞越多,安全性就受到打折!