尽管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