个人近期做了一个WordPress站点,目前处于内测阶段,虽然公网还没部署起来,但是先在这学习整理一下安全防护的问题。
第一:及时更新WordPress
由于33%的互联网都在使用WordPress站点,免不了被不怀好意的人盯上,所以官方对安全性非常看重,有专业团队监控并修复各种安全漏洞,可能会频繁的更新补丁,所以我们一定要及时的安装更新官方发布的稳定版本。这是官方设置的第一道防线。
第二:站点部署在可靠的主机上
不要贪图便宜使用不知名公司的主机,要防火墙没防火前,一堆漏洞,没什么专业的人维护。还有不要使用免费的主机,本身服务器维护成本不低,还给你免费使用,想想都不对劲儿。如果被DDOS攻击,靠谱的主机方解决起来有实力。还可以使用CDN加速(付费),来隐藏真实IP。
第三:数据自动备份--主机镜像备份
养成不管做什么,都要有备份的好习惯,即便被黑了,核心数据还在,根就在,怕啥;最坏的事故就是网站彻底做鸡了,还没备份,那心里的噶应感觉真是简直了。
推荐的还有服务器端快照备份和景象备份
数据备份插件推荐: UpdraftPlus 200多万的安装 当前更新时间2019年3月 (备份插件恢复的话不是100%)
有个简单的方法就是 在你的主机服务器上使用快照备份或者镜像备份。
第四:垃圾评论过滤
网站经常会收到一堆垃圾评论,你看就不正经,你看着像广告,但其实可能是XSS(跨站脚本攻击),危害性不可小看
你可以使用 插件: Akismet,千百万人使用,保护自己的站点免受垃圾评论的困扰
第五:身份转换
当网站被人撸了后,应该不会闲的去告诉你,所以没事的时候可以使用技术手段定时检查一下网站的安全漏洞啥的。有不少专业工具可以扫描,Kali Linux就可以攻击WordPress,转换下身份可以自己攻击自己玩玩,又能增长知识还能提前发现安全隐患。
扫描插件推荐: WordFence 当前更新于2019年3月
第六:插件安全性
网站的漏洞可能来源于插件,所以插件尽量少装,能用代码替换用代码替换,再者安装插件的话从WordPress官方的插件中心下载,避免来源不明的插件。
第七:管理员帐号安全性要高
怎么个高法?用户名和密码多种字符串联使用,比如:用户名D2e+@6~p;8[I 密码 k8/*W&^/j6>b.0
那些黑客会利用脚本自动化访问输入用户名密码来暴力破解。如果你的网站装有流量分析或者请求监控的话你可以看看,可以看到请求者的IP和他想访问的地址,从中筛选出"嫌疑犯",当然如果你的站点访问挺多的,这确实不好筛选,如果你有什么好的方法,留言一起学习。
还可以限制登录次数,插件推荐 Login LockDown 当前更新于2016年9月
第八: 更改登录入口
在你登录的时候,你可以看到浏览器地址栏那有个地址(wp-admin),如果你没做修改的话,那是WP默认的后台地址,所以修改掉你的登录入口,可以有效防止被人发现你的后台地址。
第九:使用Https协议
如果你的电脑有什么代理软件或者监听软件,普通的传输方式可能是明文的,恶意者很容易窃取你的信息。改成https放心多了
服务器商官网都有修改https教程,如果你是WordPress站点的话,可以搜索WordPress配置SSL。
第十:关闭.php文件访问权限
WP是用php开发的,在访问你的站点的时候有可能某个链接是.php的,一旦被发现php源文件有漏洞的话,他可能就会做一些渗透。
在.htaccess文件里添加针对敏感目录的规则,禁止直接访问.php文件
<Directory "/var/www/wp-content/uploads/"> <Files *.php> Order Allow, Deny Deny from all </Files> </Directory>
第十一:数据库
在安装WP的过程中有个数据库环节,其中有数据库表前缀wp_,这是默认的,如果你使用这个,可能会被撞到使用SQL注入的形式攻击你。有备份的话还好,没备份就呵呵了。
第十二:找准目标群体
个人站点是针对国内的,所以国外的一些ip就可以直接拒绝掉了 ,而且大部分进行CC攻击的多数来源是国外,只允许国内用户访问省事多了。
拒绝非中文用户访问:这需要修改 /usr/local/nginx/conf/duimin.com.conf,正常的非中文访问的全部404错误页面。
if ( $http_accept_language ~* ^[^zh]) { return 404; #非中文用户访问网站返回404 }
第十三:主机服务器设防
靠谱的主机服务商都包含主机安全,Web防火墙,DDos防护,安全组策略(端口开放限制)等功能。
第十四:代码防止CC刷新和DDos
主要方法有:
禁止网站代理访问
尽量将网站做成静态页面
限制连接数量
修改最大超时时间等
将以下代码复制粘贴到functions.php文件中。
//防止CC攻击 session_start(); //开启session $timestamp = time(); $ll_nowtime = $timestamp ; //判断session是否存在 如果存在从session取值,如果不存在进行初始化赋值 if ($_SESSION){ $ll_lasttime = $_SESSION['ll_lasttime']; $ll_times = $_SESSION['ll_times'] + 1; $_SESSION['ll_times'] = $ll_times; }else{ $ll_lasttime = $ll_nowtime; $ll_times = 1; $_SESSION['ll_times'] = $ll_times; $_SESSION['ll_lasttime'] = $ll_lasttime; } //现在时间-开始登录时间 来进行判断 如果登录频繁 跳转 否则对session进行赋值 if(($ll_nowtime - $ll_lasttime) < 3){ if ($ll_times>=5){ header("location:http://127.0.0.1");//可以换成其他链接,比如站内的404错误显示页面(千万不要用动态页面) exit; } }else{ $ll_times = 0; $_SESSION['ll_lasttime'] = $ll_nowtime; $_SESSION['ll_times'] = $ll_times; }
上面的location:http://127.0.0.1可以修改为用户多次刷新后你需要显示给用户的网址。这个网址建议放在三方服务商上。