小赖子的英国生活和资讯

密码或IP地址保护 WordPress 博客的 wp-admin 目录(并且允许 admin-ajax.php)

阅读 桌面完整版
wordpress 密码或IP地址保护 Wordpress 博客的 wp-admin 目录(并且允许 admin-ajax.php) wordpress 小技巧 服务器

wordpress

wp-admin 文件夹是 wordpress 安装中最重要的文件夹. 它主要包含控制仪表板 Dashboard 等代码. 有一个重要的文件 admin-ajax.php 在正常的博客功能中也需要被用到, 所以单纯的屏蔽整个 wp-admin 也许会损坏一些正常的功能.

最近几天, 我收到了一些邮件警报, 因为我装了一个 Limit Login Attempts 的插件. 该插件可以在后台尝试登陆次数过多的情况下禁止该IP, 能有效避免暴力尝试破解密码 Bruteforce.

WordPress Limit Login Attempts Email Warnings

我感觉还不够保险, 于是我把 wp-admin 加上了 IP白名单访问允许列表 + 密码保护, 这样就万无一失了.

在 .htaccess 里允许 admin-ajax.php

我们可以在.htaccess文件中指定访问规则, 可以把该文件放到网站根目录或wordpress的wp-admin文件夹中. 我们必须首先将 admin-ajax.php 列入白名单, 我们可以通过以下方式进行:

# 放在 /wp-admin 文件夹
<Files /admin-ajax.php>
Order allow,deny
Allow from all
Satisfy any
</Files>

在 .htaccess里进行 IP 地址限制

然后, 我们可以设置只允许某些 IP 能访问 /wp-admin, 通过以下方式(将其放置在上面提到的 Files 部分):

<Limit GET POST PUT DELETE PATCH>
order deny,allow
deny from all
allow from 12.34.56.78
</Limit>

我们还可以在 .htaccess 顶部添加上 ErrorDocument 401 default, 以便在访问被拒绝时向用户显示 401. 如果您只想允许某些 IP 能够访问 /wp-admin 文件夹(将 admin-ajax.php 列入白名单), 这里是 .htaccess 的完整源代码:

# 放在 /wp-admin 文件夹
ErrorDocument 401 default

<Limit GET POST PUT DELETE PATCH>
order deny,allow
deny from all
allow from 12.34.56.78 # 这里替换成你白名单IP地址, 按逗号隔开指定多个IP地址
</Limit>

<Files /admin-ajax.php>
Order allow,deny
Allow from all
Satisfy any
</Files>

文件夹密码保护 .htaccess (.htpasswd)

我们还可以在.htpasswd 文件中设置用户名和密码. 该文件应放置在网站目录之外以减少意外可见性(为安全起见, 最好将其放置在您的主目录中并加上相应的访问权限).

冒号后面的密码是MD5 哈希值.

# 每一行指定一个帐号和密码
username:password_md5_hash

.htpasswd 是一个文本文件, 每行指定一个用户名和密码(按冒号隔开). 然后我们可以在 .htaccess 中指定密码保护(.htaccess 的完整来源并将 admin-ajax.php 列入白名单). AuthUserFile 需要提供了 .htpasswd 文件的完整路径:

# 放在 /wp-admin 文件夹
ErrorDocument 401 default

AuthType Basic
AuthName "Restricted Area"
AuthUserFile /home/user/.htpasswd
require valid-user

<Files /admin-ajax.php>
Order allow,deny
Allow from all
Satisfy any
</Files>

然后, 当访问 /wp-admin 时, 您应该会看到弹出的身份验证对话框:

sign-in-dialog

如果提供的凭据(用户密码)无效, 您应该会看到以下消息(401 Unauthorized):

未经授权
此服务器无法验证您是否有权访问所请求的文档. 您提供了错误的凭据(例如, 密码错误), 或者您的浏览器不了解如何提供所需的凭据.

helloacm.com 上的 Apache/2.4.41 (Ubuntu) 服务器

我们还需要测试 /wp-admin/admin-ajax.php 以查看是否被列入白名单 – 应该会返回 400 Bad Request 和内容正文 “0”

英文博客: Password Protect or IP Restriction on WordPress wp-admin Folder (htaccess and htpasswd)

强烈推荐

微信公众号: 小赖子的英国生活和资讯 JustYYUK

阅读 桌面完整版
Exit mobile version