启用Apache Basic Auth,保护WordPress登录页面

尽管WordPress具有较为完善的账号验证体系,但其登录页面时常遭受各种自动化脚本的暴力猜测。Apache的验证功能可以为WordPress登录页面增加一层保护。

下面是采用Apache的Basic Auth验证功能,为wp-login.php页面增加密码保护功能。

1. 创建密码文件

Apache的htpasswd程序可以创建密码文件,并以hash值代替密码明文。命令如下:

sudo htpasswd -c /etc/apache2/.htpasswd jay

其中 -c /etc/apache2/.htpasswd表示要创建路径为/etc/apache2/.htpasswd的密码文件。如果该文件已存在,则不需要-c。这一行最后的jay是对应的用户名。

随后会提示输入两次密码。

这一步的结果如下图。

查看生成的密码文件,可见每个用户/密码对占一行,其中的密码是hash值,如下图。

2. 添加验证规则

在修改WordPress安装文件下的.htaccess文件,在后面追加如下几行。

# Use basic auth to apply additional protection on wp-login.php
<Files "wp-login.php">
    AuthType Basic
    AuthName "Restricated Content"
    AuthUserFile /etc/apache2/.htpasswd
    Require valid-user
</Files>

添加上述验证规则后,.htaccess的内容如下图。

3. 验证密码

在浏览器中,打开WordPress登录页面,Apache会先弹出一个密码验证对话框,如下图。

只有正确地输入第一步中定义的用户名和密码后,wp-login.php页面才会出现,并且要求输入WordPress的账号和密码。

4. 进一步的说明

以上操作是在Ubuntu Server 18.04上完成的。在Windows上,htpasswd似乎会停止响应。

Apache Basic Auth不仅适用于指定的某个/某些文件(本例中是wp-login.php),还可以针对特定的目录进行设定。

例如,为了保护wp-admin目录,可以在.htaccess文件中添加下述规则。

# Use basic auth to apply additional protection on wp-login.php
<Directory "wp-admin">
    AuthType Basic
    AuthName "Restricated Content"
    AuthUserFile /etc/apache2/.htpasswd
    Require valid-user
</Directory>

参考资料:

How To Set Up Password Authentication with Apache on Ubuntu 14.04