WordPress 禁止 REST API 的5种专业方法

2025.5.30 杂七杂八 1770

WordPress 禁止 REST API 的5种专业方法

WordPress REST API 为开发者提供强大接口,但可能带来安全隐患。本文详细介绍5种禁止REST API访问的方法,包括插件配置、代码修改和服务器级限制,帮助站长根据实际需求选择最适合的方案,有效提升网站安全性。

为什么需要禁止REST API访问?

WordPress REST API 默认开放可能暴露用户数据、文章草稿等敏感信息,常见风险包括:

  • 未授权获取用户列表(/wp-json/wp/v2/users)
  • 暴力破解登录接口
  • 消耗服务器资源的爬虫请求
  • 未更新核心导致的已知漏洞利用

方法一:通过插件快速禁用

安装专用插件是最简单的方式:

// 推荐插件:
// 1. Disable WP REST API
// 2. REST API Toolbox
// 3. WP Hide & Security Enhancer

Disable WP REST API为例,安装后可在设置中:

  1. 完全禁用非登录用户的API访问
  2. 选择性关闭特定端点
  3. 设置IP白名单

方法二:functions.php代码限制

在主题的functions.php中添加以下代码:

// 完全禁用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', 'API访问需要登录', array('status' => 401));
    }
    return $result;
});

方法三:禁用特定端点

针对高风险端点单独限制:

// 禁用用户列表端点
add_filter('rest_endpoints', function($endpoints) {
    if (isset($endpoints['/wp/v2/users'])) {
        unset($endpoints['/wp/v2/users']);
    }
    if (isset($endpoints['/wp/v2/users/(?P[d]+)'])) {
        unset($endpoints['/wp/v2/users/(?P[d]+)']);
    }
    return $endpoints;
});

方法四:服务器级限制(Nginx/Apache)

Nginx配置:

location ~ ^/wp-json/ {
    allow 192.168.1.100;  允许的IP
    deny all;
    try_files $uri =404;
}

Apache配置(.htaccess):

<FilesMatch "wp-json">
    Order Deny,Allow
    Deny from all
    Allow from 192.168.1.100
</FilesMatch>

方法五:修改默认路由前缀

通过过滤钩子改变API路径:

add_filter('rest_url_prefix', function() {
    return 'api-secure'; // 新路径
});

修改后需同步更新:

  • 移动应用配置
  • 第三方服务调用地址
  • 自定义脚本中的硬编码URL

最佳实践建议

  1. 生产环境建议组合使用插件+服务器限制
  2. 开发环境保留访问权限时添加HTTP Basic认证
  3. 定期检查/wp-json/wp/v2/返回的数据是否包含敏感信息
  4. 使用安全插件监控可疑的API请求

评论