API接口未做鉴权直接暴露,批量扫描自查业务全部接口
当 API 接口未做鉴权就直接暴露在公网,任何人都可以不带凭证调用业务数据,轻则信息泄露,重则被批量刷接口、拖库。
本教程面向零基础运维和开发,给出一次完整的批量扫描自查方法:先整理接口清单,再批量请求判断鉴权情况,最后说明如何修复和验证,让你能独立排查业务全部接口的暴露风险。
一、先确定需要检查的接口范围
批量扫描前,先把业务中实际存在的 API 路径整理出来,否则很容易漏掉隐藏接口。
常用来源有三个:
- 前端页面 JS 文件里的
ajax、fetch、axios请求地址 - 网关或路由配置文件,比如 Nginx 的
location规则 - 接口文档、历史抓包日志或开发者工具 Network 面板记录
整理成一份 api_list.txt,每行一个地址,例如:
https://api.example.com/user/info
https://api.example.com/order/list
https://api.example.com/admin/export
这一步只处理自己有权测试的业务,不要对未授权目标进行扫描,否则可能触发法律风险。
二、用 curl 批量探测接口鉴权状态
未鉴权接口最典型的特征是无凭证请求也返回业务数据,而不是 401/403 或登录跳转。
先用单条命令验证:
curl -i -X GET "https://api.example.com/user/info" -H "Content-Type: application/json"
观察返回状态码和响应体。
如果 HTTP/1.1 200 OK 并且返回 JSON 业务数据,说明该接口大概率未做鉴权。
要批量检测全部接口,可以写一个简单 Shell 脚本:
#!/bin/bash
while read url; do
code=$(curl -s -o /dev/null -w "%{http_code}" "$url")
echo "$url -> $code"
done < api_list.txt
执行后得到列表。
状态码是 401/403 的接口说明已有访问控制;
200 的接口需要进一步查看返回内容,确认是否真的没有鉴权。
注意部分框架对不存在的接口会统一返回 404,也会影响判断,建议结合 -L 跟随跳转,并观察响应体关键词。
三、区分“公开接口”和“鉴权绕过”
不是所有未返回 403 的接口都是漏洞。
登录验证码、注册选项、接口健康检查等通常是公开的,不要求鉴权。
真正的风险在于本应由登录用户或管理员调用的接口,无凭证也能拿到数据或执行操作。
判断方法是对同一接口做两次请求:一次不带 Cookie/Token,一次带上普通用户凭证。
如果两者返回几乎一样的数据,说明该接口完全没有校验身份;
如果无凭证请求被拦截,则鉴权已生效。
还要留意 HTTP 方法是否被限制。
有些接口对 GET 做了鉴权,但 POST、PUT 或 DELETE 方法却放行了。
批量测试时可以对同一路径附加不同方法,避免漏测。
四、修复与复查:让未授权请求回到 401/403
确认哪些接口缺少鉴权后,优先通过统一入口处理,而不是每个接口单独补丁。
如果系统有网关,可以在网关层添加认证中间件,强制校验 Token 或签名;
如果没有网关,则在后端项目里新增全局鉴权过滤器,再对白名单路径放行。
以 Nginx 反向代理场景为例,可以在 location 中拦截未携带 Authorization 头的请求:
location /api/ {
if ($http_authorization = "") {
return 401;
}
proxy_pass http://backend;
}
这只是示意配置,真实项目建议在应用层做统一鉴权,因为 Nginx 层只能做初步拦截,无法校验 Token 有效性。
修复后重跑一遍批量脚本,预期未授权请求全部变成 401/403,授权请求仍能正常返回 200。
建议把接口清单和扫描命令保存下来,在每次发版前批量执行一次,并配合日志监控发现异常访问。
五、避坑提醒:误判、限速与法律边界
批量扫描容易踩三个坑:
- 只看状态码不看内容:有些接口未鉴权时也返回 401,但仅在 Header 层面拦截,实际业务逻辑仍可绕过;有些返回 200 却只是登录页 HTML,不算数据泄露。所以要结合响应体和实际业务区分。
- 并发过高打崩服务:一次性发几千个请求可能导致数据库连接耗尽。建议在脚本里加入
sleep 0.1或者在循环内限制并发,比如使用xargs -P 10。 - 授权范围不清晰:扫描必须限定在自己负责或已获得书面授权的系统,不能把公网其他目标放进清单。即使只是做安全研究,也需要合法授权。
另外,测试时要避开业务高峰期,预留充足的带宽和请求配额。
批量发现的问题可以先记录到漏洞清单,再按风险等级逐个修复和验证。
如果你正在处理 API 接口未做鉴权直接暴露的问题,建议先按本文步骤整理接口清单并批量探测,然后根据返回结果修复,修复后务必复查。
遇到状态码判断不准的情况,可以通过抓包工具查看完整请求和响应,再结合日志判断是否真正存在鉴权缺陷。