https://www.yourwebsite.com/wp-json/wp/v2/users IP:**.**.**.**存在用户名泄露漏洞安全隐患,如何处理?
北纬目前使用的解决方案:两层防护。
两层防护简单说,即代码防护和nginx环境防护相结合。
问题,wordpress站点,如果输入如下url:
会返回用户的信息。这个接口,是 WordPress 默认开启的 REST API 接口的一部分,它确实会暴露网站的用户名(login name),即便用户没有登录。这被认为是一个潜在的安全隐患,因为攻击者可以利用这个信息进行暴力破解(Brute Force)或密码喷洒(Password Spraying)攻击。
北纬觉得wordpress默认的主题可能会代码处理了这一漏洞,有时间的朋友们可以测试。
但是对我们开发者来说,就需要自己来写代码防护了。
输入“https://www.yourwebsite.com/wp-json/wp/v2/users”会返回的类似数据如下:

代码防护,添加代码到主题的functions.php中,代码如下:
/**
* bw add 20250709 for https://www.website.com/wp-json/wp/v2/users
*/
add_filter('rest_endpoints', function($endpoints) {
// 如果不是管理员,移除用户端点
if (!current_user_can('administrator')) {
if (isset($endpoints['/wp/v2/users'])) {
unset($endpoints['/wp/v2/users']);
}
if (isset($endpoints['/wp/v2/users/(?P<id>[\d]+)'])) {
unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
}
}
return $endpoints;
});
添加代码后,再输入该url,返回数据如下:

由此可见代码防护成功。
为了更加保险,添加环境nginx防护,代码如下:
# bw-add-20250709
# 阻止 REST API 泄露用户名
location ~* ^/wp-json/wp/v2/users {
return 403;
}
添加代码后的防护效果,如下图:

这样,就成功实现了两层防护了。
至于更加具体的防护,比如防护里面只允许管理员可以查看此接口的信息等,以后有时间北纬再增强代码。