一、防止敏感文件wp-config.php泄露
都知道wp-config.php安全的重要文件,里面主要包含了站点数据库密码信息。这个文件 可以只让程序读取,而用户无法通过HTTP的方式浏览,下面为wp-config.php安全提供方案。
1
2
3
4
5
|
"修改.htaccess文件"
<
FilesMatch
"wp\-config\.php">
Order allow,deny
deny from all
</
FilesMatch
>
|
这样就可以了,当然还可以做得更绝一点,更狠一些,因为WP使用了index.php做为路由,其他文件都只是通过index.php内部调用的,所以直接访问其他PHP文件都可以过滤掉,只允许index.php和其它要被单独调用的页面(如xmlrpc.php)能被访问.
01
02
03
04
05
06
07
08
09
10
|
//禁用所有PHP文件被访问,更全面可以加"\.(htaccess|sql|log|php)$"
<
FilesMatch
"\.php">
Order allow,deny
deny from all
</
FilesMatch
>
//允许index.php,xmlrpc.php被访问
<
FilesMatch
"/(index)|(xmlrpc)\.php$">
Order allow,deny
allow from all
</
FilesMatch
>
|
现在用户访问方面应该没问题了,还有个问题忽略了,就是用户注册或登陆页面,这个也应该允许的加入到正则表达式当中就行了(wp\-login)|(wp\-signup)
二、后台wp-admin安全问题
后台登陆是统一的是wp-admin路径,使用wordpress人人皆知,当然你可以直接改成其它名称,但是有些插件什么的就会有问题了,所以直接换还是不太好操作,网上有些方案是只允许某些IP地址,和使用双层加密方案,我都觉得有些复杂或不方便,所以自己想找个更好的方案,因为我是喜欢简单的策略,只要不影响正常用户访问,那么就可以错杀一千不放过一个。
后台登陆其实很简单的,我想的是因为访问后台都需要登陆,没登陆就访问不了,那么我们把默认wp-login.php改成空或其他什么固定的内容,然后再新建一个只有你自己知道的登陆页文件件名。(如复制wp-login.php为youdonotknowlogin.php),这样你登陆了之后再访问wp-admin就可以了,如果你使用方案一个的拒绝所有PHP文件访问,在/wp-admin/目录下面还要建一个.htaccess 内容如下
1
2
3
4
5
|
//允许所有PHP被访问,否则你也无法登陆后台了,
<
FilesMatch
"\.php$">
Order allow,deny
allow from all
</
FilesMatch
>
|
这样就行了,这里的思路”跑客教授”是这么想的,因为访问后台/wp-admin/要选访问/wp-login.php进行登陆,而wp-login.php在根目录,所以在要目录限制或替换wp-login.php使它不能被访问或即使可以访问但是无法登陆,然后咱们使用一个后门页面,就是不为人知的一个登陆页面,这样只有天知,地知,我知,你不知的简单思想。
从而解决了后台的复杂问题。
还要一个注意的地方是防止目录浏览。
三、禁止目录浏览
这个就相当简单一点了,因为htaccess是可以继承的,我们只需要在根目录的.htaccess文件做一点修改就行了,添加一行
1
|
Options -Indexes
|
附加内容,以下是其它方案可以供大家参考
1.删除错误提示。
当我们登录WordPress后台失败时会显示错误信息。如果有人想攻击你的博客那么他们会从错误提示里得到很多有用的信息,我们需要做的就是不显示任何信息。
解决:打开functions.php 文件并添加如下代码:
add_filter(‘login_errors’,create_function(‘$a’, “return null;”));
这段代码可以让返回的错误信息为空。
2.使用SSL。
如果你担心数据泄露或被截获,那就使用SSL连接方式吧。但是之前请确保博客主机支持SSL,如果不支持请直接跳过本条。
解决:打开wp-config.php 文件(一般位于根目录)添加以下代码:
define(‘FORCE_SSL_ADMIN’, true);
我们定义了FORCE_SSL_ADMIN常数,其值设置为true。这样就在WordPress里开启了SSL。
3.用.htaccess 保护配置文件。
WordPress用户都知道wp-config.php文件的重要性,它保存了所有的配置信息:用户名、密码等等。所以控制对wp-config.php 的访问权限就变得尤为必要。
解决:在修改.htaccess文件前请先备份,然后打开并粘贴下面代码:
order allow,deny
deny from all
修改后会拒绝任何对wp-config.php 文件的访问。
4.建立访问黑名单。
是不是常被一些垃圾评论制造者所烦恼?如果是,需要做的就是屏蔽他们的IP,让他们再也无法访问你的博客。
解决:修改.htaccess文件添加以下代码,事前别忘备份。
order allow,deny
allow from all
deny from 123.456.789
deny from 93.121.788
deny from 223.956.789
deny from 128.456.780
修改后上面这些IP就会被限制访问。
5.防止脚本注入。
脚本注入往往用来窃取用户信息,如果攻击者一旦得逞大多数情况下造成的损失很难挽回。
解决:依旧是.htaccess 文件添加以下代码,事先备份。
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]
修改后所有的请求都会被检查是否包换脚本段,如果包含就会拒绝请求返回403错误。
6.防止图片盗链。
大多数虚拟主机和VPS都是限制流量的,而图片往往会消耗绝大部分流量。我们在希望自己文章被更多人访问和传播的同时又不得不去面对图片链接带来的巨大流量。所以防止图片外链是绝对必要的。
解决:修改.htaccess 文件添加以下代码,之前一定记得备份。
RewriteEngine On
#Replace ?mysite\.com/ with your blog url
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
#Replace /images/nohotlink.jpg with your “don’t hotlink” image url
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]
修改完成之后只有你的网站可以引用图片,而其他外部引用都会被替换为nohotlink.jpg 文件。你可以在nohotlink.jpg 里展示版权信息。当然你也可以指定替换为一个不存在的文件。
7.创建一个插件来阻止恶意请求。
黑客往往使用恶意查询来修着博客的薄弱点用来攻击,虽然WordPress自身有比较完善的防护机制,但也不是没有提高的余地。
解决:创建一个文本文件粘贴以下代码,并保存为blockbadqueries.php 。上传到你博客的wp-content/plugins文件夹下,进入后台开启这个插件。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<span>
/*</span>
<span>Plugin Name: Block Bad Queries</span>
<span>Plugin URI: http://perishablepress.com/press/2009/12/22/protect-wordpress-against-malicious-url-requests/</span>
<span>Description: Protect WordPress Against Malicious URL Requests</span>
<span>Author URI: http://perishablepress.com/</span>
<span>Author: Perishable Press</span>
<span>Version: 1.0</span>
<span>*/
</span>
<span>
global
$user_ID
;</span>
<span>
if
(
$user_ID
) {</span>
<span>
if
(!current_user_can('level_10′)) {</span>
<span>
if
(
strlen
(
$_SERVER
[
'REQUEST_URI'
]) > 255 ||</span>
<span>
strpos
(
$_SERVER
[
'REQUEST_URI'
],
"eval("
) ||</span>
<span>
strpos
(
$_SERVER
[
'REQUEST_URI'
],
"CONCAT"
) ||</span>
<span>
strpos
(
$_SERVER
[
'REQUEST_URI'
],
"UNION+SELECT"
) ||</span>
<span>
strpos
(
$_SERVER
[
'REQUEST_URI'
], "base64″)) {</span>
<span>@header(
"HTTP/1.1 414 Request-URI Too Long"
);</span>
<span>@header(
"Status: 414 Request-URI Too Long"
);</span>
<span>@header(
"Connection: Close"
);</span>
<span>@
exit
;</span>
<span>}</span>
<span>}</span>
<span>}</span>
<span>?>
|
修改后GET参数超过255个字符)或者URI中存在PHP函数就会得到414码。
8.删除WordPress版本号!
头文件里面有WordPress的版本号。黑客们知道了版本号就走转了几个圏,那么他们的功击力度就大一些,所以隐藏版本号是个好办法。
解决:添加以下代码到正使用的皮肤目录下functions.php 文件
remove_action(‘wp_head’, ‘wp_generator’);
9.重命名默认管理员名。
爆破密码最常采用的方法之一。该方法很简单:尽可能多的尝试不同的密码。如果用户名是明确的,就只需破密码,可能性又加大了。重命名默认admin名也是有效的办法。
解决:在数据库管理执行如下SQL语句.
UPDATE wp_users SET user_login = ‘newadminname’ WHERE user_login = ‘admin’;
//注:newadminname为你的新管理员名称