wordpress存在用户名泄露漏洞安全隐患

496 2025年07月13日 北纬

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;
}

添加代码后的防护效果,如下图:

这样,就成功实现了两层防护了。

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

上一篇: 下一篇:

坚守于博客的老站长
静下心来,分享自己所学技术,所感所悟。