电脑工场
白蓝主题五 · 清爽阅读
首页  > 网络基础

API接口安全防护措施:别让数据在门口就丢了

公司后台系统刚上线一周,订单数据突然被批量导出;某小程序的用户手机号和地址列表,在黑市上被标价出售;甚至有开发者发现,自己写的天气查询接口,每天被调用几十万次,流量费暴涨——这些都不是段子,而是真实发生的 API 接口失守现场。

为什么API比网页更危险?

网页有登录页、验证码、图形校验,用户操作还有浏览器行为限制。而 API 是给程序“看”的,没有界面,不讲人情,只认请求头、参数和 Token。一个没加权限控制的 /api/v1/users 接口,配上正确的 Authorization 头,就能直接拉走全量用户信息。攻击者不需要懂业务逻辑,只要会抓包、写脚本,就能自动化扫接口、爆破密钥、伪造身份。

几招实打实的防护动作

1. 身份认证不能只靠“用户名+密码”传参
把账号密码拼在 URL 里(如 ?user=admin&pwd=123)是大忌。应强制使用 OAuth 2.0 或 JWT。JWT 示例中,服务端签发带过期时间的 token:

{
  "sub": "user_12345",
  "exp": 1735689600,
  "scope": ["read:order", "write:profile"]
}

每次请求必须携带 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...,后端校验签名和有效期,过期即拒。

2. 限流不是可选项,是保命线
一个接口每秒被调 5000 次,大概率不是用户,是爬虫或撞库工具。Nginx 可以简单限流:

limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
location /api/ {
    limit_req zone=api_limit burst=20 nodelay;
    proxy_pass http://backend;
}

意思是:单 IP 每秒最多 10 次,允许突发 20 次,超了直接返回 503。

3. 敏感字段必须脱敏+分级
查用户详情的接口,返回字段不能是 {"name":"张三","phone":"138****1234","id_card":"110101********1234"} 这种“全量裸奔”。应按角色动态过滤:客服看到手机号中间四位打星,审计员看不到身份证号,前端调用连 email 字段都不返回。

4. 日志要记“谁、什么时候、干了什么”,但别记密码和token
记录 POST /api/v1/login status=401 ip=203.124.55.17 user_agent="curl/7.68.0" 有价值;记录 password=123456 就是给自己埋雷。日志系统要配置字段过滤规则,敏感关键词自动掩码。

别忽视最基础的一环:文档与测试环境隔离

很多团队把 Swagger 文档部署在生产环境,还开着 Try it out 功能。攻击者点开就能试调所有接口。正确做法是:API 文档仅限内网访问;测试环境用独立域名(如 api-staging.example.com),数据库用模拟数据,且禁止连接生产数据库;上线前跑一遍自动化安全扫描,比如用 OpenAPI-Security 工具检测未授权访问路径。

安全不是加个防火墙就完事,而是每个接口都像自家快递柜——得刷卡、输密码、限时取件、超时锁死。API 防护,本质是把信任拆成一段段,每段都要验、都要控、都要记。