从漏洞原理到防护实战,全面覆盖API安全的十大核心场景。含代码示例、最佳实践和YesApi Pro内置安全能力说明。
每个漏洞的风险等级、攻击原理和防护方案
| # | 漏洞名称 | 风险等级 | 典型攻击方式 | 防护方案摘要 |
|---|---|---|---|---|
| 1 | BFLA — 权限级别失效 | 严重 | 普通用户通过修改角色ID获取管理员权限 | 每次请求严格校验当前用户的角色和权限范围,禁止客户端传递角色参数 |
| 2 | BOLA — 对象级别授权缺陷 | 严重 | 修改URL中的ID查看他人数据(如 /user/123 → /user/456) | 校验数据所有权关系,使用不可预测的UUID替代自增ID |
| 3 | 用户认证过度暴露 | 高危 | API返回多余的用户信息或允许弱密码注册 | 最小化返回字段,实施密码强度策略,启用MFA |
| 4 | 缺乏资源/速率限制 | 高危 | 无限制调用导致DoS或账单爆炸 | 实施多层次限流:全局/用户/IP/端点四维度 |
| 5 | 批量分配(Mass Assignment) | 高危 | POST请求中包含非预期字段(如is_admin=true) | 使用白名单机制只接受预期字段,拒绝其他所有字段 |
| 6 | 安全配置错误 | 高危 | CORS配置为*、Debug模式开启、默认凭证 | 关闭Debug模式、精确配置CORS Origin列表 |
| 7 | 注入攻击 | 严重 | NoSQL注入、OS命令注入、XXE注入 | 参数化查询、输入白名单校验、沙箱执行环境 |
| 8 | 不当资产管理 | 中等 | 废弃版本API未下线、文档暴露内部结构 | API版本生命周期管理、文档脱敏 |
| 9 | API滥用 | 中等 | 合法用户超出正常使用范围(爬虫、刷单) | 行为分析 + 限流 + 账户风控模型 |
| 10 | insufficient monitoring & logging | 中等 | 无法发现和追溯安全事件 | 全链路审计日志、异常告警、日志留存≥180天 |
JWT / OAuth2 / API Key 三种主流方案的选择与实现
JWT是目前最流行的API认证方案,由Header.Payload.Signature三部分组成的无状态Token。优势:无需Session存储、天然适合分布式架构、跨域友好。
安全要点:
OAuth2是授权框架(不是认证框架),常用于第三方应用授权接入你的API平台。四种授权模式各有适用场景:
⚠️ 注意:OAuth2本身只解决授权问题,需要配合OIDC(OpenID Connect)才能完整处理身份认证。
API Key是最简单的认证方式,适用于公开API或内部系统对接。但存在明显局限:无法携带用户信息、无法精细控制过期时间、密钥泄露影响面大。
推荐实践:API Key作为辅助认证(配合JWT),用于限流计费维度的标识;主认证仍建议使用JWT/OAuth2。
从网关到应用的全方位流量控制
Nginx/Apache层面限制整个服务的总QPS上限,防止服务器过载。如:limit_req_zone 1000 req/s
按API Key或JWT中的userId限制单个用户的调用频率。如:100次/分钟/用户,超限返回429 Too Many Requests
按来源IP地址限流,防止单一IP发起DDoS式攻击。如:500次/分钟/IP
针对高消耗接口单独设限。如:搜索接口10次/分钟、普通接口100次/分钟
生产环境推荐使用Redis + Lua脚本实现原子性限流,避免竞态条件导致的计数偏差:
SQL / NoSQL / XSS / SSRF 四大注入类型及防御
攻击原理:将恶意SQL语句拼接到API参数中,绕过认证或窃取数据。
防御方案:
攻击原理:在API响应中注入JS脚本,当浏览器渲染时执行恶意代码。
防御方案:
攻击原理:利用API服务器的内网访问能力,探测或攻击内网资源。
防御方案:
攻击原理:在MongoDB等NoSQL查询中使用$where/$ne等操作符绕过认证。
防御方案:
从检测到脱敏到审计的全链路数据保护
DLP(Data Loss Prevention)的核心目标是:确保敏感数据不会在不恰当的场景中被展示或导出。
| 数据类型 | 正则检测规则 | 脱敏策略 | 适用场景 |
|---|---|---|---|
| 手机号 | /^1[3-9]\d{9}$/ | 138****1234(中间4位掩码) | 所有对外接口 |
| 身份证号 | /^\d{17}[\dXx]$/ | 110***********1234(前3后4) | 实名认证接口 |
| 银行卡号 | /^\d{16,19}$/ | **** **** **** 1234(前12位掩码) | 支付相关接口 |
| 电子邮箱 | /^[\w.-]+@[\w.-]+\.\w+$/ | a***b@example.com(首尾各留1字符) | 用户资料接口 |
| 姓名 | 中文姓名库匹配 | 张*(姓氏保留,名字掩码) | 日志/报表 |
YesApi Pro 内置DLP模块支持上述5种敏感数据的自动检测和脱敏规则配置,可在API响应返回前自动执行脱敏处理,无需业务代码改动。SaaS接口计费系统中同样集成了DLP能力,满足金融和政务行业的合规要求。
所有API通信必须使用HTTPS。推荐配置:
敏感字段数据库存储加密:
满足等保2.0要求的日志记录与留存策略
每次API调用应记录以下关键字段:
留存要求:根据等保2.0三级要求,安全日志需保存至少180天,重要操作日志建议留存6个月以上。YesApi Pro内置审计日志功能,支持日志查询、导出和自动清理。
API安全的三道防线:1)身份认证——强制使用JWT/OAuth2/API Key进行请求验证,禁止未认证访问;2)限流防刷——对每个API密钥或IP实施速率限制(如每分钟100次),防止暴力破解和资源滥用;3)输入校验——对所有入参进行白名单校验和SQL注入/XSS过滤。据Gartner 2025年报告,实施这三项措施可阻断超过85%的API攻击。
JWT安全设计的6个关键点:1)签名算法使用RS256(非对称加密)而非HS256(共享密钥);2)Token有效期不超过30分钟(Access Token)+ Refresh Token轮换;3)敏感信息(密码、密钥)绝不能放入Payload;4)实现Token撤销机制(黑名单/JWKS轮换);5)传输必须使用HTTPS;6)使用jti声明防止重放攻击。YesApi Pro内置JWT引擎,自动处理Token生成、校验、刷新和撤销全流程。
五层防爬策略:1)频率限制——按IP+Key双维度限速(如100次/分钟/IP);2)行为分析——检测异常模式(连续高频请求、固定间隔请求);3)验证码——触发阈值后弹出图形验证码;4)返回脱敏——敏感字段(手机号、身份证号、银行卡号)自动掩码显示;5)法律追责——在服务协议中明确禁止爬虫并保留追责权利。YesApi Pro的DLP模块内置前4层能力,开箱即用。
SQL注入防护三原则:1)参数化查询——永远不要拼接SQL字符串,使用PDO预处理或ORM的参数绑定功能;2)最小权限——数据库账号只给SELECT/INSERT权限,不给DROP/ALTER权限;3)输入白名单——只允许预期的字符类型(数字只允许[0-9]、邮箱只允许[a-zA-Z0-9@.])。XSS防护三原则:1)输出编码——所有动态内容在HTML中输出时做HTML实体编码(htmlspecialchars);2)Content-Type明确设置——API返回JSON时显式设置application/json;3)CSP头部配置——限制可加载的资源来源。
国内企业API平台的合规基线包括:《网络安全法》等级保护2.0三级、《个人信息保护法》(PIPL)、《数据安全法》。关键要求:1)操作日志留存≥180天;2)敏感数据存储加密AES-256;3)传输加密TLS 1.3;4)支持MFA多因素认证;5)数据出境需通过国家网信部门评估。YesApi Pro内置DLP数据防泄漏模块,支持敏感字段检测、脱敏规则配置和审计日志导出,可直接满足等保2.0三级的大部分技术要求。详见私有化部署选型指南。