现在的位置: 首页 > 站长专区 > 网站建设 > 正文
wordpress网站终极防黑手册,全方位保护网站安全
2013年10月20日 网站建设 ⁄ 共 4294字 暂无评论 ⁄ 被围观 36 views+

在群中闲聊时发现很多wordpress站长都很不注意网站的信息安全,各种漏洞、各种信息泄露。wordpress安全问题被小编我所关注着,我们如何做才能最大程度上保护我们的wordpress程序不被黑客所攻击?可能很多技术大牛都习以为常了,但是毕竟还是有很多菜鸟不知道的。接下来就来教大家为自己的wordpress修复一些常见的bug,预防黑客。

首先是wordpress的全版本通杀爆绝对路径漏洞:

1、/wp-includes/registration-functions.php

2、/wp-includes/user.php

3、/wp-admin/admin-functions.php

4、/wp-admin/upgrade-functions.php

只要直接访问以上文件或者访问当前wordpress网站的主题目录下任意php文件都会爆出网站的绝对路径,就连wordpress官方的主题twentytwelve也不例外。

解决方法一、在以上文件的的头部 <?php 后加入:

error_reporting(0);

保护wordpress后台不被直接访问,防止直接post登录wordpress后台。

隐藏wordpress后台,保护登录文件wp-login.php:

wordpress是 款安全系数很高的开源系统,虽然wordpress自身的安全性很好但是如果站长自己不注意保护网站的话还是很容易被黑的。大家都知道wordpress 系统的默认后台地址为/wp-login.php。直接将网站后台暴露给他人是非常不安全的,但是修改wordpress的目录结构又太过于麻烦,所以我 们可以给wp-login.php文件做一些限制防止wp-login.php被直接打开。

方法一:直接修改wp-login.php

用代码编辑软件打开wp-login.php文件(PS:用win自带的记事本打开可能会造成文件编码错误,导致wordpress报错。)找到以下代码:

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 );
?>

在此段代码下面加一个$_GET参数

<?php
if($_GET["root"]!="admin2013"){
header('Location: http://www.tzxnews.com');
}
?>

然后再访问登录页面试试,是不是转跳到v7v3的首页呢,其实此时的后台地址就变成了/wp-login.php?root=admin2013

代码中的root和admin2013可以修改成你想要的任何形式。

方法二:修改functions.php 文件

如果你不想修改系统文件,可以将下面的代码添加到当前主题的 functions.php 文件:

add_action('login_enqueue_scripts','login_protection');
function login_protection(){
if($_GET['root'] != 'admin2013')header('Location: http://www.tzxnews.com/');
}

$_GET访问限制方法还可以有一种方法,也是修改登录路径的:

 找到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://www.tzxnews.com');
}
?>

其中aa、bb替换为自己的内容,然后wordpress后台的地址就变成了 http://www.tzxnews.com/wp-login.php?aa=bb 结构了,这就成了您wordpress后台的唯一路径,其他路径均跳转到首页了!这跟上面修改functions.php 文件效果是一样的。

下面的方法只是使用$_GET对wp-login.php做一个访问的障眼法而已。其实仔细分析下wordpress登录页面代码不难发现wordpress是以post的方式来提交登陆参数的,如下图:

保护wordpress登录文件

也 就是说我们可以不用访问wp-login.php文件,而是直接通过post递交参数给wp-login.php来直接登录网站后台,那么之前所提到 的$_GET对wp-login.php做的访问限制就形同虚设,那么该如何来有效的防止wordpress的登录文件不被直接访问而且不能以常规的 post方式来登录网站后台呢?

第一步:我们登录后台进入到常规选项:在WordPress地址(URL)这一栏加上/cainiao如下图:

第二步:我们在网站根目录下新建一个名为cainiao的目录,然后将除了index.php、robots.txt以及.htaccess之外的所有网站文件移至cainiao目录(登录变为tzxnews.com/cainiao/wp-login.php)。

第三步:打开index.php并将   require('./wp-blog-header.php');

修改为:require('./cainiao/wp-blog-header.php');

这样一来wordpress的后台地址以及登录post提交参数的地址都随着wordpress系统文件的移动而改变了,再配合写的$_GET访问限制方法就可以达到很好的防黑效果。

为了更加的安全,建议大家或者说一定不要将admin还作为网站管理帐号登陆,这给暴力破解带来了方便。同时,通过?author=$id也可以很简单的爆出我们的管理帐号,例如:222.com/?author=*(*号为1-9999数字)即可轻而易举的爆出我们的管理帐号,有了帐号再加上市面上的密码字典,那破解也只是时间问题了,解决方法是在functions.php文件里添加一下一下代码:

add_filter( 'request', 'tzxnews_author_link_request' );
function tzxnews_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', 'tzxnews_author_link', 10, 2 );
function tzxnews_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目录下新建个.htaccess让只有你一个IP能够访问,这个方法麻烦就麻烦在如果你的网是动态IP,那么就要进.htaccess修改一次IP,才可访问,但是这方法也绝对够安全了。.htaccess的内容为:

order deny, allow

allow from 888.888.888.8888 #Your IP Address

deny from all

隐藏头部不必要出现的信息,例如wordpress版本号等等,暴力攻击者掌握了我们的wordpress版本号后就可以根据目前已知漏洞进行攻击了,解决的方法是在我们的主题文件夹的functions.php内添加下面信息,以方便隐藏了wordpress不必要出现的信息,也给网站优化方面带来好处!

<?php
//移除头部多余信息
remove_action('wp_head','wp_generator');//禁止在head泄露wordpress版本号
remove_action('wp_head','rsd_link');//移除head中的rel="EditURI"
remove_action('wp_head','wlwmanifest_link');//移除head中的rel="wlwmanifest"
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );//rel=pre
remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0 );//rel=shortlink
remove_action('wp_head', 'rel_canonical' );
?>

当然我们如果用的是服务器,而不是虚拟主机的话,也最好到服务器下的php.ini文件里关闭php报错,一般php.ini文件的路径在/usr/local/php/etc下,修改php.ini文件内display_errors = off 即可屏蔽整个服务器的php报错!

本文来自V7V3,部分文字有删改!

文章出自: http://www.tzxnews.com/?p=476 您可以复制链接 郑重声明:本站文章部分为作者原创文章,可自由引用,但务必请以链接形式标明本站或本文地址!

QR:  wordpress网站终极防黑手册,全方位保护网站安全
如若喜欢本文,您可以点此赞助本站!万分感谢!