WordPress

WordPress禁止游客访问REST API的用户信息 隐藏管理员和用户名

2024年8月18日 · · · 本文共1264个字 · 预计阅读5分钟2015次已读
目录
文章目录隐藏
  1. 前言
  2. 解决方法

前言

  WordPress的/wp-json/wp/v2/users是REST API的用户信息,可显示站点管理员的用户名(见下图),为了安全起见,隐藏或限制REST API的访问,以防止被获取管理员用户名。

WordPress禁止游客访问REST API的用户信息 隐藏管理员和用户名

解决方法

一、WordPress后台 > 外观 > 主题文件编辑器 > 点击模板函数 > 将代码(按网站用户数选择代码)粘贴到模板函数文件中 > 最后更新文件

代码一(适合单用户网站)

//禁止游客访问REST API的用户信息
add_filter('rest_authentication_errors', function($result) {
    if (!empty($result)) {
        return $result;
    }
    if (!is_user_logged_in()) {
        return new WP_Error('rest_not_logged_in', 'You are not currently logged in.', array('status' => 401));
    }
    return $result;
});

代码二(适合多用户网站)

//只限管理员访问REST API的用户信息
function restrict_rest_api_users_to_admin( $response, $handler, $request ) {
    if ( ! current_user_can( 'administrator' ) ) {
        return new WP_Error( 'rest_forbidden', __( 'You cannot view this resource.' ), array( 'status' => rest_authorization_required_code() ) );
    }
    return $response;
}
add_filter( 'rest_pre_dispatch', 'restrict_rest_api_users_to_admin', 10, 3 );

代码三(主题功能依赖REST API,只隐藏用户名)

//只隐藏REST API用户信息的管理员用户名
function hide_user_slug_and_link_in_rest_api( $response, $user, $request ) {
    if ( isset( $response->data['slug'] ) ) {
        unset( $response->data['slug'] );
    }
    if ( isset( $response->data['link'] ) ) {
        unset( $response->data['link'] );
    }
    return $response;
}
add_filter( 'rest_prepare_user', 'hide_user_slug_and_link_in_rest_api', 10, 3 );
WordPress禁止游客访问REST API的用户信息 隐藏管理员和用户名

二、游客身份访问REST API的用户信息显示如下图。

WordPress禁止游客访问REST API的用户信息 隐藏管理员和用户名
3 条评论
  1. 老白2024-8-18 · 22:57

    可以,好东西,试试

    • 不凡2024-8-19 · 8:14

      我在子比官方论坛看到有个用户发帖说网安说他的网站存在泄露用户信息“漏洞”,我在你和青禾的网站试了下,都能看到用户名

      • 老白2024-8-19 · 22:05

        是的,我也试了确实可以,不过我还隐藏了网站后台管理地址,双重保护了

Powered by atecplugins.com