不登录就能从接口读到站里的哪些内容,要不要收口
不做登录能读到什么,取决于站点把哪些内容设为公开。WordPress 的接口手册给出的口径是:默认端点覆盖文章、页面、分类法以及其他内置数据类型;站点上公开的内容一般都可以经接口读取;而加密内容、内部用户、自定义类型与元数据只有在带身份验证时才可用。换句话说,接口没有额外的「公开面」,它放大的是本来就公开的那一面。要不要收口的判断标准因此很具体:不是「有没有接口」,而是「公开面里有没有本不该被机器批量拿走的东西,以及写操作有没有被限制住」。
默认公开的那一面有多大
三个层次要分开看:
内容层。已发布的文章与页面正文、标题、摘要、时间、所属分类与标签,都是默认可读的字段。对内容型站点这是收录与集成的必要条件,通常不需要收。
结构层。分类、标签、菜单与站点信息的枚举接口,让外部程序能在不猜地址的情况下拿到整站结构。它放大的不是单篇内容,而是「批量整理站点的点」,采集类需求多从这里入手。
账号层。公开作者的简介类字段本身有限,但配合枚举行为可以得出存在哪些账号,这正是登录类攻击的第一步输入。手册把内部用户列在需要鉴权的一侧,说明这一层的可见性应当由站点显式控制。
| 数据面 | 默认可见性 | 收口动作 |
|---|---|---|
| 已发布文章与页面 | 可读 | 保持公开,按需限制单次返回量 |
| 分类与标签结构 | 可读 | 保留读取,避免暴露内部命名 |
| 草稿与待发布内容 | 需鉴权 | 确认预览链接不绕过状态判断 |
| 加密保护的内容 | 需鉴权 | 核对返回体不带正文 |
| 内部用户与元数据 | 需鉴权 | 按用户组收紧可见字段 |
| 写操作 | 需身份与权限 | 按域关闭高危能力,加确认环节 |
哪些字段最容易漏
三类情况反复出现:
一是状态判断只在列表接口做,详情接口按地址直读,导致未发布内容可通过标识访问。核对应从详情接口做起,而不是只看列表。
二是「隐藏」只在前台模板里生效,接口仍原样返回字段。凡是只靠模板不显示来控制的内容,都要单独测一次接口。
三是元数据把内部配置带出去。手册把元数据列在需鉴权一侧的原因就在这里:它的字段名与取值往往反映实现细节。
收口的三层:域、账号、动作
第一层按能力域划暴露范围。读写能力混在同一入口时,收口只能靠一刀切。AnQiCMS 的 MCP 接口按意图域设置暴露范围,备份、升级、多站点这类全站级操作所在的高危域默认关闭,需要显式开启;这意味着「接口开不开」被拆成「哪些域开」,配置粒度落在域上。
第二层按账号分组收权限。同一域名下不同人该看到的字段不同。AnQiCMS 提供用户管理与 VIP 分组,可以为不同用户组设置访问权限,公开读者、编辑、管理员各自的接口面应当不同。
第三层给写操作加确认。读接口出错影响可见范围,写接口出错影响数据。AnQiCMS 的 MCP 侧支持 Bearer Token 鉴权与回合级操作审批,写操作合并确认后再执行,避免一次误判直接落到生产数据上。
先测后收的顺序
收口前要有基线,否则改完不知道有没有改对。建议四步:
- 用未登录状态把常用读接口逐个请求一遍,记录返回字段,形成「机器现在能看到什么」的清单。
- 对照内容状态逐个验证:草稿、待发布、加密保护、回收站里的内容都不应通过公开路径读到正文。
- 查接口文档是否把能力分组写清楚。AnQiCMS 的高频调用能力(文档列表与详情、分类与标签、图片上传、留言与评论、友情链接、系统设置与联系方式)在站内的接口帮助分类下有公开说明,文档粒度直接影响收口时能不能判断影响面。
- 按域关闭不需要的写能力,保留必要的读能力,再复测第一步的清单,确认可见面确实缩小而不是全站报错。
常见问题
把接口整体关掉更安全吗? 代价通常更大:正常的前端取数、搜索接入与集成都会一起失效。收口的目的是把公开面收敛到需要的大小,而不是取消它。
内容本来就是公开的,为什么要担心批量读取? 公开与可被整站枚举是两件事。结构层的枚举能力让复制整站内容的成本大幅下降,防采集干扰码这类机制正是为这一层准备的。
用户列表能不能直接隐藏? 可以,做法是把账号层字段留在需鉴权一侧,并核对按标识直读的路径。前台不显示不等于接口不返回。
多久该复测一次? 每次涉及接口字段、内容状态或权限分组的版本更新后都要复测;没有更新时,按季度做一次基线比对即可。