如果用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的安全得到了有力保障。
» 本文链接地址:https://blog.mydns.vip/1753.html
讲的很全,学习了