WordPress 关闭 REST API、隐藏后台接口、屏蔽 wp-json 入口|防止爬虫扒站、恶意枚举账号、提升网站安全性完整教程
时间:2026-08-02 23:14:31 来源:aliz.cn 作者:SKY 阅读:
前言
很多做 WordPress 建站的站长忽略了一个高危默认配置:WP 自带的 REST API(地址
域名/wp-json/)和 XML-RPC 接口。 攻击者可以直接访问/wp-json/wp/v2/users一键扒出所有后台管理员用户名,暴力破解登录密码;采集爬虫通过 API 高速抓取全站所有文章,占用大量服务器带宽;漏洞扫描工具也会通过该接口探测程序版本、插件信息。 日常纯内容展示型网站,几乎用不到 REST API 功能,完全可以直接关闭屏蔽。本文分代码函数禁用、服务器拦截、插件开关三套方案,按需选用,兼顾兼容性与安全性。
重要前置说明
- 若站点使用小程序、APP 对接 WP 后台、部分表单插件依赖 API,不要彻底关闭,改用限制匿名访问方案;纯网页资讯站可直接完全禁用;
- 操作前备份主题函数文件与站点伪静态规则;
- 关闭后测试:访问
域名/wp-json,返回 404 / 禁止访问即为生效。
一、方案一:子主题 functions.php 代码彻底关闭(推荐,优先级最高)
使用子主题添加代码,避免主题升级后失效,打开子主题
functions.php文件,底部粘贴完整代码:php
运行
/**
* 彻底关闭WordPress REST API,禁止匿名访问wp-json
*/
// 禁用REST API接口
add_filter('rest_authentication_errors', 'aliz_close_rest_api');
function aliz_close_rest_api($result) {
if (!is_user_logged_in()) {
return new WP_Error('rest_api_closed', '接口已关闭', array('status' => 403));
}
return $result;
}
// 移除页面头部自动输出的wp-api链接标签
remove_action('wp_head', 'rest_output_link_wp_head', 10);
remove_action('wp_head', 'wp_oembed_add_discovery_links', 10);
// 关闭XML-RPC接口(暴力破解重灾区)
add_filter('xmlrpc_enabled', '__return_false');
// 屏蔽头部WordPress版本号泄露,进一步加固
remove_action('wp_head', 'wp_generator');
代码功能拆解
- 未登录访客访问
wp-json直接返回 403 禁止访问,登录管理员可正常使用后台功能; - 清除网页源代码里
<link rel="wp-api">暴露接口的标签; - 关闭 XML-RPC,杜绝密码暴力枚举、Pingback 垃圾攻击;
- 隐藏 WP 版本号,避免针对性漏洞扫描。
二、方案二:服务器层面直接拦截接口访问(全站强制屏蔽)
2.1 Nginx 环境配置(Linux 宝塔)
站点配置
server{}内添加规则,直接拦截/wp-json、/xmlrpc.php:nginx
# 拦截REST API wp-json
location ~* ^/wp-json {
return 404;
}
# 拦截XML-RPC暴力攻击文件
location ~* xmlrpc\.php$ {
return 403;
}
执行
nginx -t校验无误后重载配置nginx -s reload。
2.2 Windows IIS 环境 web.config 规则(你当前服务器)
在
<rules>节点内插入重写规则,匹配到接口地址直接返回 404:xml
<rule name="block-wpjson" stopProcessing="true">
<match url="^wp-json(.*)" />
<action type="CustomResponse" statusCode="404" statusReason="Not Found" statusDescription="接口已关闭" />
</rule>
<rule name="block-xmlrpc" stopProcessing="true">
<match url="xmlrpc\.php" />
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="禁止访问" />
</rule>
保存
web.config立即生效,无需重启 IIS。
三、方案三:小白零代码插件一键关闭
不会修改代码和配置文件,直接安装轻量插件可视化开关:
- 后台插件搜索安装:Disable WP REST API
- 启用后自动关闭匿名 API 访问;
- 搭配插件:Disable XML-RPC 关闭远程调用接口; 优点:一键启用 / 停用,后续需要对接小程序时直接关闭插件即可恢复接口。
四、附加安全加固配套操作(一并完成)
4.1 禁止通过作者归档页面枚举用户名
WP 默认
/?author=1可读取管理员账号,添加到 functions.php:php
运行
// 禁止通过author参数暴露用户ID和用户名
add_action('template_redirect', 'aliz_block_author_enum');
function aliz_block_author_enum() {
if (is_author() || isset($_GET['author'])) {
wp_redirect(home_url(), 301);
exit;
}
}
4.2 修改后台默认登录地址
宝塔配合 WP 插件改
wp-admin登录入口,避免暴力扫描后台地址。
五、验证是否成功关闭的检测方法
- 浏览器打开:
https://你的域名/wp-json- 代码方案:提示接口已关闭 403;
- 服务器拦截方案:直接 404 页面;
- 查看网页源码,搜索
wp-api无相关标签即为清理完成; - 访问
域名/xmlrpc.php无法正常打开。
六、常见兼容问题解决
问题 1:关闭 API 后小程序 / 表单插件失效
解决:不要完全 return 403,改用仅限制匿名访问的第一段代码,管理员登录状态保留 API 权限。
问题 2:主题编辑器、古腾堡后台异常
解决:古腾堡编辑器依赖 API,仅屏蔽前台匿名访问即可,不要服务器全局拦截。
问题 3:提交表单提示接口请求失败
解决:检查表单插件是否调用 wp-json,临时放开对应接口路径白名单。
七、三种方案选型建议
- 纯资讯博客、内容站,兼顾后台兼容性 → 方案一 子主题函数代码(首选)
- 彻底一刀切,完全不允许任何 API 访问 → 方案二 服务器伪静态拦截
- 新手怕改错代码、后续需要灵活开关 → 方案三 插件一键操作
本文配套模板、静态源码可前往艾立兹素材库alisucai.com下载
发表评论
共有0条评论