没有所谓的捷径
一切都是时间最平凡的累积

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

本文最后更新:2019年5月14日,已超过1802天未更新,如果文章内容失效,请留言反馈本站。

如果用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.xxx.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;
}

六、禁止盗用wordpress图片

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

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

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}

删除这段,更换成

#禁止图片盗链
location ~ .(gif|jpg|jpeg|png|bmp)$ {
valid_referers none blocked *.duimin.com duimin.com ;
if ($invalid_referer) {
return   404;
}
}

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

如果你使用的是虚拟主机,直接上插件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底部,输入下边代码。

#禁止非GET|HEAD|POST方式的抓取
if ($request_method !~ ^(GET|HEAD|POST)$) {return 403;}
#禁止Scrapy等工具的抓取
if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {return 403;}
#针对特殊的user_agent的访问
if ($http_user_agent ~ "Mozilla/4.0\ \(compatible;\ MSIE\ 6.0;\ Windows\ NT\ 5.1;\ SV1;\ .NET\ CLR\ 1.1.4322;\ .NET\ CLR\ 2.0.50727\)") {return 404;}

#禁止指定UA及UA为空的访问
if ($http_user_agent ~* "YodaoBot|Slurp|Teoma|ia_archiver|twiceler|MSNBot|Scrubby|Robozilla|Gigabot|googlebot-image|googlebot-mobile|yahoo-mmcrawler|yahoo-blogs/v3.9|psbot|Nutch|naverbot|yeti|sterias|AhrefsBot|BLEXBot|MJ12bot|bingbot|netEstate|YisouSpider|Yahoo!SlurpChina|YoudaoBot|msnbot|msnbot-media|EasouSpider|JikeSpider|EtaoSpider|YandexBot/3.0|Google-Test|MegaIndex.ru|WinHttp|WebZIP|FetchURL|node-superagent|java/|FeedDemon|Jullo|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|Java|Feedly|Apache-HttpAsyncClient|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|BOT/0.1|YunSecurityBot/1.0|DotBot/1.1|FlightDeckReports|Linguee Bot|^$" ) {
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太高。

如果对国外IP没要求的话,可以屏蔽国外访问,国外IP访问跳转到百度网站。

function aliuyun_getRealIp()
{
$ip=false;
if(!empty($_SERVER["HTTP_CLIENT_IP"])){
$ip = $_SERVER["HTTP_CLIENT_IP"];
}
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }
for ($i = 0; $i < count($ips); $i++) {
if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {
$ip = $ips[$i];
break;
}
}
}
return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
}

function aliuyun_locate($ip) {
$ip=aliuyun_getRealIp();
if(empty($ip)) $ip = get_comment_author_IP();
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, 'http://ip.taobao.com/service/getIpInfo.php?ip='.$ip);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
$result = json_decode($file_contents,true);
if ($result['data']['country'] != '中国') {
wp_redirect( 'https://www.baidu.com' );
} else {
echo '<!-- 运营商是'.$result['data']['isp'].',IP是'.$ip.',禁止外国IP访问!! -->';
}
}
add_action( 'wp_footer', 'aliuyun_locate' );

八、禁止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的安全得到了有力保障。

» 站长码字辛苦,有用点个赞吧,也可以打个
» 若转载请保留本文转自:豫章小站 » 《WordPress被攻击安全防御》
» 本文链接地址:https://blog.mydns.vip/1753.html
» 如果喜欢可以: 点此订阅本站 有需要帮助,可以联系小站
赞(0) 打赏
声明:本站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,若涉及侵权请及时告知,将会在第一时间删除,联系邮箱:contact@mydns.vip。文章观点不代表本站立场。本站原创内容未经允许不得转载,或转载时需注明出处:豫章小站 » WordPress被攻击安全防御
分享到: 更多 (0)

评论 1


  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    讲的很全,学习了

    书签网1年前 (2023-02-04) 15:09回复

智慧源于勤奋,伟大出自平凡

没有所谓的捷径,一切都是时间最平凡的累积,今天所做的努力都是在为明天积蓄力量

联系我们赞助我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏