WordPress安全:防御CC攻击和暴力扫描的十大技巧

  • A+
所属分类:WordPress
摘要

如果用wordpress做网站,第一步就是修改后台登录,细心的人会发现,访问日志每天都有大量的CC攻击,扫漏洞、暴力破解密码的记录。

做站最让人恶心的就是受到非法分子的骚扰,扫描漏洞、破解密码、CC攻击等,搜遍百度,没有一篇关于wordpress安全防护的总结文章,只能自己总结一篇,以备不时之需,同时与大家分享。

防御CC攻击,就需要禁止所有的动态页面,页可以理解成禁止所有读取数据库的页面。

一、网站静态化

WP Super Cache应该是最好的缓存插件了,可以使文章、页面、分类、分页实现全站静态化,黑客CC静态页面,再访问网站直接调用缓存的html页面。

二、关闭前台搜索页

在主题functions.php里<?php下边添加如下代码,再访问就会访问404,有人会问关闭了搜索功能,怎么搜索呢,可以使用《百度站内搜索》,世界使用百度的代码即可。本站主题跟这个代码不兼容,记得把[ss]去掉一个s,变成[ s]就可以生效了,进行搜索,就不会读取数据库了。

function fb_filter_query( $query, $error = true ) {
if ( is_search() ) {
$query->is_search = false;
$query->query_vars展开 = false;
$query->query展开 = false;
if ( $error == true )
$query->is_404 = true;
}
}
add_action( 'parse_query', 'fb_filter_query' );
add_filter( 'get_search_form', create_function( '$a', "return null;" ) );

三、修改或关闭后台登录页wp-login.php

用wp做站,登录地址是必须修改的,对方一旦破解,要么给你网站挂上代码、木马,要么偷你的数据文件,要么把你的主机搞成肉鸡去攻击别人,有两种方法保护后台。

以我的网站为例,在主题functions.php里<?php下边添加如下代码,再访问就会跳转到指定的域名。

//保护后台登录

add_action('login_enqueue_scripts','login_protection');

function login_protection(){

if($_GET['admin'] != 'duimin')header('Location: http://www.baidu.com/');  

}

建议跳转到404页面,如果跳转到自己的网址,页面一定要是静态的,如此,没人会猜到你的登录地址是什么了。

http://www.duimin.com/wp-login.php?admin=duimin

第二种方法,你可以修改根目录下的/wp-login.php,修改个名字,比如/wp-duimin.php,由于黑客不知道你的登录地址改成啥了,所以攻击/wp-login.php是不存在的页面,所以不吃你的主机CPU资源。

自己管理主机时再把/wp-duimin.php改回/wp-login.php,用/wp-login.php登录就行了。

四、关闭XML-RPC接口(pingbacks和trackbacks)

XML-RPC接口是用于wordpress安卓版或苹果端的API接口,它是众多黑客抓取的肉鸡导火索。利用xmlrpc.php攻击,可以绕过你的后台登录地址,直接post到你的username和password,让你的网站、主机成为黑客的肉鸡,任他摆布。

不关闭的话,文章链接到内部或外部网站,就会收到pingbacks引用的通告,不但读取收据库,还会让数据库变的臃肿。在主题functions.php里<?php下边添加如下代码。

add_filter('xmlrpc_enabled', '__return_false');

如此,网站安全了很多,如果你使用第三方客户端管理wordpress,那么只关闭XML-RPC的pingback的端口即可。

add_filter( 'xmlrpc_methods', 'remove_xmlrpc_pingback_ping' );

function remove_xmlrpc_pingback_ping( $methods ) {

unset( $methods['pingback.ping'] );

return $methods;

}

五、禁止访问某个文件类型或文件夹

一些坏人通过扫描漏洞文件,获得数据库名、用户名、密码,网站被挂代码,使用Linux主机,修改 /usr/local/nginx/conf/duimin.com.conf,在最底部添加如下代码。如果你的网站目录里有其他后缀文件,也可以添加,用|隔开。如此以来,再也不怕扫描到了,因为算扫到打开是403、404错误页面。

第一段禁止扫描下载压缩包文件,二三段,禁止访问根目录。

#禁止扫描压缩包

location ~* \.(zip|tar|tar.gz|tgz|php)$ {
deny all;
}

location = /wp-includes/ {

return 404;

}

location = /wp-content/ {

return 404;

}

六、禁止盗用wordpress图片

很多无耻的站长,采集原创文章,不留转载链接,就连图片也不放过,建议给图片加码,如果被采集,请按下边教学操作。

如果使用的是LINXU云主机或VSP主机,修改 /usr/local/nginx/conf/duimin.com.conf,在顶部添加如下代码。

#禁止图片盗链

location ~ .(gif|jpg|jpeg|png|bmp)$ {

valid_referers none blocked *.duimin.com duimin.com ;

if ($invalid_referer) {

return   403;

}

}

第一行,是图片的格式,第二行添加允许显示本站的图片的站点域名,第五行是显示的盗链图片网址。凡是采集你网站的,他们的网站上的图片都会显示你设置的这个图片地址,建议设置一个盗链警示图片。

如果你使用的是虚拟主机,直接上插件Hotlink Protection。或者在上传修改根目录下的.htaccess文件,如果没有的话,就创建个.txt文本修改成.htaccess,粘贴下边的代码上传至根目录,更换成你要展示的盗图提示。

# BEGIN WordPress

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php [L]

RewriteBase /wp-content/uploads/

RewriteCond %{HTTP_REFERER} !^$ [NC]

RewriteCond %{HTTP_REFERER} !duimin.com [NC]

RewriteCond %{HTTP_REFERER} !baidu.com [NC]

RewriteCond %{HTTP_REFERER} !com [NC]

RewriteCond %{HTTP_REFERER} !so.com [NC]

RewriteCond %{HTTP_REFERER} !sougou.com [NC]

RewriteCond %{HTTP_REFERER} !yahoo.com [NC]

RewriteCond %{HTTP_REFERER} !youdao.com [NC]

RewriteCond %{HTTP_REFERER} !bing.com [NC]

RewriteRule .*\.(gif|jpg|jpeg|png|bmp|zip|rar|swf)$http://duimin.com/wp-content/themes/begin/img/logo.png [R,NC,L]

</IfModule>

# END WordPress

如此以来,图片再也不会被采集了,省的流量都被别人弄走了,弄的自己主机变慢。当然还有很多防盗链的方法,比如用又拍云、七牛云存储这些第三方图库,或者百度云加速的防盗链功能。如果你的主机够强力,可以允许盗图,但要在自己的图片添加水印。

七、禁止采集内容

采集内容是对原创的侵权,辛辛苦苦写一篇原创,被对方采集走,也不留下原文地址。一些新博客,刚写的文章,就被别人采集走了,由于新站权重小,蜘蛛稍微爬晚了一会,先爬的采集站的内容,原创就成了别人的。

采集挡不住手动,如果是对着原文打字抄袭,也是防不住的。如果是复制粘贴的话,可以通过插件WP-CopyRightPro禁止,勾选所有,在输入一段话:版权所有,禁止采集!保存即可,别人就无法手动复制了。

一些无耻的站长,内容用软件采集其它网站的,通过HTTP_USER_AGENT来判断是正常浏览还是采集、爬虫,凡是采集爬虫程序的一律失效。nginx服务器使用/usr/local/nginx/conf/duimin.com.conf底部,输入下边代码。

#禁止爬虫采集

if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
return 403;
}
#禁止指定UA及UA为空的访问
if ($http_user_agent ~* "FeedDemon|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|^$" ) {
return 403;
}
#禁止非GET|HEAD|POST方式的抓取
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 403;
}

 

用的虚拟主机的话,把下边代码放在index.php 中的第一个 <?php 之后即可:

//获取UA信息
$ua = $_SERVER['HTTP_USER_AGENT'];
//将恶意USER_AGENT存入数组
$now_ua = array('FeedDemon ','BOT/0.1 (BOT for JCE)','CrawlDaddy ','Java','Feedly','UniversalFeedParser','ApacheBench','Swiftbot','ZmEu','Indy Library','oBot','jaunty','YandexBot','AhrefsBot','MJ12bot','WinHttp','EasouSpider','HttpClient','Microsoft URL Control','YYSpider','jaunty','Python-urllib','lightDeckReports Bot');
//禁止空USER_AGENT,dedecms等主流采集程序都是空USER_AGENT,部分sql注入工具也是空USER_AGENT
if(!$ua) {
header("Content-type: text/html; charset=utf-8");
die('请勿采集本站,因为采集的站长木有小JJ!');
}else{
foreach($now_ua as $value )
//判断是否是数组中存在的UA
if(eregi($value,$ua)) {
header("Content-type: text/html; charset=utf-8");
die('请勿采集本站,因为采集的站长木有小JJ!');
}
}

搜索引擎页采集,通过日志查询是哪个bot,必须谷歌、必应、雅虎等搜索引擎的爬虫,国内是没人用的,就可以关闭,不然每当采集时cpu太高。

八、禁止wp-cron.php

wp-cron.php是定时发布功能,这个文件经常导致主机cpu满了死机,它的工作原理就是,有人访问博客或后台工作时,会去坚持是否有任务要执行,根目录wp-config.php文件添加下边代码。

define('DISABLE_WP_CRON', true);

九、禁止机器人垃圾评论

如果你的主题没有设计禁止机器人评论,建议安装myQaptcha滑轮插件,如果此插件跟你的主题不兼容,那么请使用这段代码,在主题模板函数 functions.php的<?php下边添加代码实现。

// 禁止全英文评论

function scp_comment_post( $incoming_comment ) {

$pattern = '/[一-龥]/u';

if(!preg_match($pattern, $incoming_comment['comment_content'])) {

wp_die( "You should type some Chinese word (like \"你好\") in your comment to pass the spam-check, thanks for your patience! 您的评论中必须包含汉字!" );

}

return( $incoming_comment );

}

add_filter('preprocess_comment', 'scp_comment_post');

 

// 禁止日文评论

function BYMT_comment_jp_post( $incoming_comment ) {

$jpattern ='/[ぁ-ん]+|[ァ-ヴ]+/u';

if(preg_match($jpattern, $incoming_comment['comment_content'])){

wp_die( "禁止有日文字符的评论 You should type some Chinese word" );

}

return( $incoming_comment );

}

add_filter('preprocess_comment', 'BYMT_comment_jp_post');十、第三方服务

十、第三方服务

如果有人恶意访问,不停扫描或攻击你的网站,可以使用第三方产品来阻止这些恶意访问。

1、cckiller

轻量级的防御工具,自动拉黑和释放功能,每分钟检查到恶意访问的IP,就会被拉黑。免费的还有云锁,安全狗等产品。

wget -O install.sh --no-check-certificate https://zhangge.net/wp-content/uploads/files/cckiller/install.sh?ver=1.0.5 && chmod +x install.sh && bash install.sh -i

2、CDN

国内最好的是网宿CDN,上市公司,中国很多CDN加速都是网宿的产品,另一家就是美国的cloudflare,简称CF,CF的墙功能5秒盾非常强大,可以有效的挡住90%以上的CC攻击,禁止某些国家和地区的IP访问,请查看cloudflare设置教程

3、金盾

金盾是国内最好的防御CC的产品了,如果你使用CDN还是防不住,就必须使用金盾了,金盾防火墙完美的防御CC攻击,并且不影响搜索引擎蜘蛛对页面的抓取。原理就是为每个访问网页的请求附一个值,来判断是人为还是机器人。也有使用360安全卫士、安全狗,云锁的软件,侧重点各有不同吧。

4、Wordfence Security插件

号称最强大的wordpress安全卫士,可以防篡改,后门检测,防火墙,屏蔽国家访问等功能,高级版是收费的。

没有办法,这几款第三方的产品都是收费的,但抗CC攻击也是最强大的。

这十个技巧都用上,你的主机基本上高枕无忧了,再也不用怕扫描和CC攻击了,wordpress的安全得到了有力保障。

发表评论

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen: