欢迎访问艾立兹站 Aliz- 专注建站教程与技术分享
您当前的位置:首页 > 建站教程 > WordPress 建站

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 功能,完全可以直接关闭屏蔽。本文分代码函数禁用、服务器拦截、插件开关三套方案,按需选用,兼顾兼容性与安全性。

重要前置说明

  1. 若站点使用小程序、APP 对接 WP 后台、部分表单插件依赖 API,不要彻底关闭,改用限制匿名访问方案;纯网页资讯站可直接完全禁用;
  2. 操作前备份主题函数文件与站点伪静态规则;
  3. 关闭后测试:访问域名/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');

代码功能拆解

  1. 未登录访客访问wp-json直接返回 403 禁止访问,登录管理员可正常使用后台功能;
  2. 清除网页源代码里<link rel="wp-api">暴露接口的标签;
  3. 关闭 XML-RPC,杜绝密码暴力枚举、Pingback 垃圾攻击;
  4. 隐藏 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。

三、方案三:小白零代码插件一键关闭


不会修改代码和配置文件,直接安装轻量插件可视化开关:
  1. 后台插件搜索安装:Disable WP REST API
  2. 启用后自动关闭匿名 API 访问;
  3. 搭配插件: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登录入口,避免暴力扫描后台地址。

五、验证是否成功关闭的检测方法

  1. 浏览器打开:https://你的域名/wp-json
    • 代码方案:提示接口已关闭 403;
    • 服务器拦截方案:直接 404 页面;
  2. 查看网页源码,搜索wp-api无相关标签即为清理完成;
  3. 访问域名/xmlrpc.php无法正常打开。

六、常见兼容问题解决

问题 1:关闭 API 后小程序 / 表单插件失效


解决:不要完全 return 403,改用仅限制匿名访问的第一段代码,管理员登录状态保留 API 权限。

问题 2:主题编辑器、古腾堡后台异常


解决:古腾堡编辑器依赖 API,仅屏蔽前台匿名访问即可,不要服务器全局拦截。

问题 3:提交表单提示接口请求失败


解决:检查表单插件是否调用 wp-json,临时放开对应接口路径白名单。

七、三种方案选型建议

  1. 纯资讯博客、内容站,兼顾后台兼容性 → 方案一 子主题函数代码(首选)
  2. 彻底一刀切,完全不允许任何 API 访问 → 方案二 服务器伪静态拦截
  3. 新手怕改错代码、后续需要灵活开关 → 方案三 插件一键操作

本文配套模板、静态源码可前往艾立兹素材库alisucai.com下载

发表评论 共有0条评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
公众号二维码

扫码关注公众号
获取全套技术教程