你的wordpress网站足够安全吗?专业防黑安全措施分享

2016-12-15发布在 Wordpress,建站1415 次访问

wordpress-js-css

一直有外贸 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'] != 'whoareyou') || ($_GET['password'] != 'iamnobody'))header('Location: http://photocdn.sohu.com/20151012/mp35170363_749_8.jpeg');
}

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

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

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

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

相当于别人想找到你府邸的大门,就要先找到我们设置的一道隐形的外门,这道隐形外门是通往府邸大门的唯一入口。想要进入,必须正确输入这道隐形外门的地址。
如果输入错误,就会跳转到凤姐的照片欣赏地址(当然你也可以把该地址换成你想转向的网址)

fengjie-1

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

注意:以上代码内的 admin 和 password 不要写你登录的账号和密码

4)用个强力一点的密码

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

106S23a35m66ok+!

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

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

这个在之前的安装 WordPress 的教程里( https://www.liaosam.com/guide-for-wordpress-newbees.html )讲过了,这里就不重复了。回顾一下看看截图吧:

fill-in-sheet

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

定期备份网站

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

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

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

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

bl1

show-file-directory

bl2

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

  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

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

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

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

file-manager-htaccess

 

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

oai

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

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

success-to-hidden-file-direcotry

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

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

直接上图说吧:

index-manager

index-manager2

index-manager3

index-manager4

index-manager5

 

隐藏 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未加保护的 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

 

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

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

 

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

phpinfo

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

 

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

403-pd

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


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

location /wp-content/uploads/ {

location ~ .*.(php)?$ {

deny all;

}

}

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

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

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

不管是免费还是付费的主题和插件,都尽量通过 WP 官方或者后台去获取安装。

使用 SSL 加密数据

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

SSL 可以确保用户浏览器和服务器之间的安全数据传输,使黑客很难破坏连接信息。获取 SSL 证书不是问题,你可以从 bluehost 或者相关机构去购买证书,费用并不贵,百把块钱。我的英文网站使用的是 Let’s Encrypt SSL证书,现在不少网站用的也是这种。


 

本站所有文章除注明“转载”的文章之外,均为原创。未经本站允许,请勿随意转载或用作任何商业用途,否则依法追究侵权者法律责任的权利。

分享到微信朋友圈

LiaoSam
LiaoSam
外贸综合症患者

相关文章

    暂无

11条评论

发表我的评论

取消评论

邮箱白名单说明:最近料网自动提醒邮件经常会被一些邮件服务商拦截。为了您顺利并及时地收取留言被回复的提醒邮件,请在您邮箱中把料网 liaosam.com 加入白名单域名。

已读说明
设为私密评论
添加表情

Hi,您需要填写昵称和邮箱!

您的邮箱地址不会公开,仅仅用于收取回复。建议填写QQ邮箱,不宜填写工作邮箱。
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址 (没有就留空)
呃,评论有点多呢... 料网小秘书为您玩命加载中...
  1. #5

    Sam,恶意代码怎么找呢?

    1个月前 (01-18)回复
    • LiaoSam
      Liaosam,外贸综合症患者。
      @eaeason 在 FTP 工具里看文件最后修改时间。最近被修改过的你又并没有修改的最可疑。比如有个文件是前天的凌晨3点钟,但是你那时间只可能在睡觉,而你也没有任何插件会去修改那个文件,那么很显然这个文件就是黑客修改的。
      1个月前 (01-18)回复
      • @Liaosam 多谢,怎么找出免费主题中 function 文件中的恶意代码呢?有没有某些关键词可以搜到?

        1个月前 (01-18)回复
        • LiaoSam
          Liaosam,外贸综合症患者。
          @eaeason 哦。我理解错了。你是问在一些网站上下载的主题 function.php 文件里有恶意代码怎么找?你去官方正规渠道购买就好了啊,别百度上搜什么汉化版免费版之类的。官方购买:https://themeforest.net
          1个月前 (01-18)回复
  2. #4

    WP本身就够安全了,相比某DEDE分分钟被黑那简直不可同日而语,服务器权限也很重要,.htaccess 是个好东西,可以做的事有很多 :idea:

    2个月前 (12-28)回复
    • LiaoSam
      Liaosam,外贸综合症患者。
      @aunsen dede? 好古老的建站程序,国内垃圾站有大半都是这个做的。加上火车头采集~ :)
      2个月前 (12-29)回复
  3. #3
    baibaoxiaozhu@gmail.com

    sam哥,如果不是很麻烦的话,您能否抽空下一篇关于怎么在Linode安装SSL证书的流程呀?技术小白是在是没招了。

    2个月前 (12-22)回复
    • LiaoSam
      Liaosam,外贸综合症患者。
      @baibaoxiaozhu@gmail.com 刚写完,发了。
      2个月前 (12-24)回复
  4. #2

    有用 谢谢

    2个月前 (12-17)回复
  5. #1
    xjhwa

    感谢Sam哥分享~ :mrgreen:

    2个月前 (12-17)回复