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为例,安装后可在设置中:
- 完全禁用非登录用户的API访问
- 选择性关闭特定端点
- 设置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
最佳实践建议
- 生产环境建议组合使用插件+服务器限制
- 开发环境保留访问权限时添加HTTP Basic认证
- 定期检查/wp-json/wp/v2/返回的数据是否包含敏感信息
- 使用安全插件监控可疑的API请求
评论