写文章
料神Sam
2016-12-22 13:40

【料神原创】你的wordpress网站足够安全吗?专业防黑安全措施分享(更新完毕!)

wordpress-security.jpg

一直有外贸 Soho 抱怨 WordPress 的安全性不够高,自己辛辛苦苦建立的英文网站被黑客黑了。由于 WordPress 是个非常流行的开源的建站程序,所以全球研究 WordPress 的人也不少,也有很多黑客就盯上了 WordPress。

但是,我们不该责怪 WordPress,它本身并没有错。通常都是我们所做的防范措施太少,太过疏忽大意,导致黑客轻松就侵入。作为一个具有多年 WP 使用经验的用户,在此分享一些我个人的建议和措施,希望能帮助大家尽可能地有效防范黑客的破坏行为。

锁掉登录页面防范暴力攻击

每个用过 WordPress 的用户都知道 WP 的标准后台登录页面为 /wp-admin/ 以及 /wp-login.php ,你想象过没有你的登录页面每天正经历多少次的黑客攻击软件的扫描?我推荐你要做的第一件事就是更换后台登录页面的地址。

关于后台登录页面,建议如下:

1)对多次错误登录的行为进行监控和禁止

很多暴力破解的攻击手段都是不停的更换密码来尝试登录进 WP 后台。我建议安装插件:Login LockDown,它在这方面的安全性做得很不错。如果某个访问者尝试不同的密码错误次数超过设定值,那么该 IP 会被记录,并且 IP 被拦截,禁止访问网站。

2)用 email 地址而不是用户名登录

WP 默认是用 username 来登录,显然这个并不够安全。有些不够安全的主题,通过在域名后面加上 /?author=1 来访问的方式,会暴露 WordPress 的后台登录用户名。而且有的建站者可能用户名起的跟域名又有某种联系,甚至用一些常见的 admin 来作为用户名,使得黑客很容易就能猜测并暴力尝试,这显然是很不安全的。

你可以通过修改 WordPress 数据表 users 表来修改登录用户名 user_login,也可以使用更安全的方式:email 地址作为用户名来登录。就是你安装 WordPress 或注册用户的时候填写的邮箱地址,这是一般黑客想不到的。你可以用 WP Email Login 插件来实现,它配置很简单,激活后几乎无需任何配置。

3)改掉登录页面的 URL

黑客们会用暴力猜测数据库工具来扫描你的登录页面。这种工具会将他们数据库中存放的数百万的猜测的用户名和密码组合进行暴力倾泻,如果有命中的,那么你的 WordPress 就被侵入了。为了安全起见,我们改成一个特别并安全的 URL地址吧。

将你的 WP 主题文件夹里面的 functions.php 文件下载到本地,注意先备份一份。用文本编辑器 notepad++ 打开 functions.php,在最底下,粘贴以下代码:

//保护后台登录

add_action('login_enqueue_scripts','login_protection');

function login_protection(){ 

 if(($_GET['admin'] != 'whoisyourlifeguider') || ($_GET['password'] != 'mrhua'))header('Location: http://www.ruosi6.cn/image268/23171/69840171%20%28372%29.jpg');

}

保存并上传到空间将老的functions.php 替换。从现在开始,想要登录后台,所有人必须都通过访问:

http://www.xx.com/wp-login.php?admin=whoisyourlifeguider&password=mrhua

这个唯一的 URL 页面地址来访问你的网站后台了。即:

在原来的 wp-login.php 的后面多加了两个变量 admin 和 password,这两个变量组合构成唯一的一个页面URL。

相当于别人想找到你府邸的大门,就要先找到我们设置的一道隐形的外门,这道隐形外门是通往府邸大门的唯一入口。

想要进入,前提是必须正确输入这道隐形外门的地址。如果输入错误,就会跳转到凤姐的照片欣赏地址(当然你也可以把该地址换成你想转向的网址)

fengjie.jpg

本来我想做个 js 死循环不断弹窗的网页,但是一想万一我自己不小心输错转到这个页面不是惨了。所以害怕自己输错的朋友,记得把这个唯一的登录后台页面的地址,收藏到收藏栏里。

注意:以上代码内的 admin 和 password 不要写你登录的账号和密码,你可以随意用两个字符串都OK。另外,如果你觉得两个变量太长,也可以就用一个 admin=。。 即可。

4)用个强力一点的密码

建议 数字+大写+小写+符号 的组合。有些人可能怕自己密码多了不好记,那么我推荐一个格式,你借鉴看看:IP地址分为4段吧? 比如:106.23.35.66,把你的英文名字前三个字母拆了进入去,首个字母大写,最后第4段固定用某个字母和符号的组合,比如 ok+!

106S23a35m66ok+!

WP 用户密码 和 数据库用户密码 最好分开设置成不一样的密码。

安装 WordPress 时不要用默认的 wp_ 前缀

这个在之前的安装 WordPress 的教程里也讲过了,这里就不重复了。回顾一下看看截图吧:

fill-in-sheet.png

如果你已经安装过了,想修改前缀,使用 WP-DBManager 插件即可修改 WordPress 数据表前缀。修改之后你可以再删除插件。

定期备份网站

关于备份数据库,你可以使用 WP Database Backup 插件来定期备份数据库。如果想要备份整个网站,那么推荐使用 Duplicator 插件,它基本上可以把网站文件和数据库都备份好。

如果你用的是 VPS,如 Linode,那么我建议你还可以考虑开通 BackUp 服务,每个月 2.5 美金,定期备份整个磁盘,生成快照。不要嫌贵,如果你整个网站文件和数据库被删除,你就知道整盘备份这功能是多么重要了。

阻止文件目录浏览(Directory Browse)

大部分的虚拟主机对于文件目录浏览的权限都是开放的,这并不安全。浏览者可以看到你目录里有哪些文件,文件名称是什么。如下图所示:

bl1.png

show-file-directory.png

bl2.png

显然这是相当不安全的。一般是由于当前目录下没有主页文件引起的。有三种解决办法:

1)每个文件目录下放一个空的 index.html 或 index.php 文件

2)修改 htaccess 配置文件不显示文件目录

3)使用 Bluehost 的 Cpanel 里的索引管理器(Cpanle - Advances 下的 Index Manager)

前一种方式操作很简单,就是稍微有点麻烦,我们用第二种或者第三种方法。

先说第 2 种方法):如果你使用 Bluehost 虚拟主机并且安装了 Yoast SEO 插件,那么可以在 Yoast SEO 插件设置那里直接编辑 .htaccess 文件,加上以下代码即可关闭文件目录浏览:

Options All -Indexes

注意:Bluehost 上 的 .htaccess 改动不需要重启 apache 服务,只要在网站首页按 Ctrl+F5 即可。CTRL+F5 是彻底刷新(删除缓存后重新从服务器获取页面)

bluehost-htaccess-change.png

除了在 Yoast SEO 插件中编辑 .htaccess 文件,你也可以用 Bluehost 后台的 Cpanel 里的 File Manager(文件管理器)。

点击 public_html 找到你的网站目录,在当前页面的 URL 后面加上 &showhidden=1 就可以自动显示隐藏文件。在网站根目录下找 .htaccess 文件。

找到以后,在文件上点击右键,选择菜单中的 "Code Edit"。

file-manager-htaccess.png

会出现一个对话框,只需点击“编辑”按钮继续,编辑器将在新窗口中打开。

oai.png

编辑完成后,点击右上角的“ Save ”按钮。

在原本显示文件目录的页面按 Ctrl + F5,强制刷新生效。生效后我们看,文件目录下原本暴露文件目录的情况已经得到解决。网站返回 403 拒绝访问。

success-to-hidden-file-direcotry.png

这代表我们已经成功设置好了。

再说说第三种办法)直接用 Bluehost Cpanel 的 Advances(高级)下的 Index Manager 来设置哪个目录不显示文件索引。

直接上图说吧:

index-manager.png

index-manager2.png

index-manager3.png

index-manager4.png

index-manager5.png

隐藏 config.php

WordPress 根目录下的 wp-config.php 文件中记录了我们的 wordpress 使用的 mysql 数据库表名、用户、以及明文的密码!

// ** MySQL 设置 ** //

/** WordPress 数据库的名称 /

define('DB_NAME', 'xxxxxxxxxxxxxxxxxxxx');

/** MySQL 数据库用户名 /

define('DB_USER', 'xxxxxxxxxxxxxxxxxxxx');

/** MySQL 数据库密码 /

define('DB_PASSWORD', 'xxxxxxx明文的密码xxxxxxxx');

/** MySQL 主机 /

define('DB_HOST', 'localhost');

/** 创建数据表时默认的文字编码 /

define('DB_CHARSET', 'utf8');

/** 数据库整理类型。如不确定请勿更改 /

define('DB_COLLATE', '');

如果不加限制,wp-config.php 很容易就被黑客获取了。比如,各类黑客工具之中的网络爬虫程序,有些爬虫程序抓一些特定的 php 文件真是小菜一碟。看看下面的截图:

crawling.png

未加保护的 wp-config.php 文件,被网络爬虫抓取到了

所以,我们必须把 wp-config.php 文件保护起来,如何保护呢?我们需要修改 .htaccess 文件。

同上文,在 Yoast SEO 插件设置那里直接编辑 .htaccess 文件,加上以下代码:

<files wp-config.php>

order allow,deny

deny from all

</files>

这样一来,就阻止了各类恶意网络爬虫抓取文件。

阻止上传文件夹内的任何 php 文件执行

通常你被黑之后都能在 wp-content/uploads/ 文件夹下发现一个可疑的 php 文件,这是黑客上传的控制文件,我们要关闭访问任何 .php 文件的权限。

在网站根目录的 .htaccess 文件中添加代码。代码如下:

RewriteEngine on RewriteCond % !^$

RewriteRule uploads/(.).(php)$ – [F]

注意:代码写在 <IfModule mod_rewrite.c> </IfModule> 内。

OK,结合上面的一些我们需要添加到 .htaccess 文件中的代码,完整的添加代码有 3 处,截图如下:

three-revise-finished.png

记得点保存,然后在网站首页按 ctrl+F5 强制刷新生效。

我们来测试一下,我们上传一个 test.php文件,此文件内我们写入 <?php echo phpinfo(); ?> ,此函数会显示 php 服务器信息。然后我们来访问看看:

没有添加截图 2 的代码时,显示了主机的详细信息:

phpinfo.png

稍微懂点 php 的人都知道,这个信息是黑客/攻击者最想获取的服务器信息,里面记录各种配置参数、路径、版本等等。黑客有了这个信息,简直如虎添翼!

我们添加截图中代码 2 以后,再访问此 php 文件,显示 403 不允许访问,拒绝访问一切 php 文件!

403-pd.png

至此,你已经成功地配置了防御措施。

如果是 VPS LNMP 环境的话,需要在虚拟主机配置文件 conf中定义 ( 路径:/usr/local/nginx/conf/vhost/www.abc.com.conf  ) 。添加在 Server 段:

location /wp-content/uploads/ {

location ~ .*.(php)?$ {

deny all;

}

}

记得重启 nginx。 service nginx restart 或者 /etc/init.d/php-fpm restart

不用来历不明的免费主题和插件

当年为了能免费使用 themeforest 上的那些高大上的英文主题,我在百度里搜索,在国内一些主题免费下载站下载了一些国外主题。一开始不知道,后来偶然才发现这些英文主题里 functions.php 文件里竟然有一些伪装得很好的恶意代码,可以让人获得 uploads 文件夹的权限,我 TM 吓出一身冷汗~ 

从此再也不用这些下载站的主题。不管是免费还是付费的主题和插件,都尽量通过 WP 官方或者后台去获取安装。

使用 SSL 加密数据

用 SSL(安全套接层协议)证书不只是为了浏览器地址栏上那个绿色的小锁,更是为了安全。并且 SSL证书也会影响 Google 对你网站的信任度。Google 对没有启用 SSL 的网站都认为安全级别不够高,所以不久的将来 https 协议肯定会逐渐取代 http。

SSL 可以确保用户浏览器和服务器之间的安全数据传输,使黑客很难破坏连接信息。获取 SSL 证书不是问题,有免费也有付费的。我的英文网站使用的是免费的 Let’s Encrypt SSL证书,现在不少网站用的也是这种。如果你用的是 VPS 建站,那么看料网的教程部署免费的 Let's Encrypt SSL 证书即可。

如果你用的是 Bluehost 虚拟主机,那么你可以参考这篇文章去安装:http://ask.imiker.com/question/20547  

当然你也可以用付费的证书,从 bluehost 或者相关机构去购买证书,费用并不贵,百把块钱。

最后,申明一下:我介绍的这些方法都是我自己用的,经验证绝对可行。如果你有什么问题或者更好的办法,欢迎留言。

本文原文链接:https://www.liaosam.com/security-your-wordpress-website-with-sams-suggestions.html

关注作者,看更多TA的好文章 个人展示
料神Sam 谁在评论里提醒下这位作者,懒得连名片都没填写。
举报
收藏
转发
0/500
添加表情
评论
评论 (48)
最近
最早
3天2夜学会建站

料神Sam

料神米课项目合伙人、讲师15年外贸行业经验,外贸老鸟之路系列文章作者,各方面都略懂一些,帮助5万+外贸人提升业务收入。个人博客站长 liaosam.com

向TA提问
置顶时间 :

设置帖子类型

普通
新闻
活动
修改

圈内转发

0/104

分享至微信

复制链接

举报

请选择举报理由

留联系方式
垃圾广告
人身攻击
侵权抄袭
违法信息
举报

确认要删除自己的评论吗?

取消 确定

确认要删除自己的文章吗?

取消 确定
提问
设置提问积分
当前可用积分:
-
+
20
50
100
200
偷看

积分偷看

10积分
我的积分(可用积分)
确认偷看

问题已关注

答主回复后,系统将通知你

不再提示