API是现代应用程序的攻击面。大多数数据泄露针对的是API而非前端界面。以下是真正导致安全事件的漏洞类别,每类都有实用的缓解措施。
对象级别授权缺陷(BOLA)
最常见的API漏洞。当一个端点接受请求中的对象ID并在未验证请求用户是否有权访问的情况下返回或修改该对象时,就会发生此漏洞。示例:GET /api/orders/12345无论经过身份验证的用户是否拥有该订单都会返回它。修复:始终在数据访问层而非仅在路由层验证所有权。永远不要不加验证地信任客户端提供的ID。
批量赋值
当API端点接受JSON正文并将所有提供的字段分配给模型对象时发生——包括用户不应能设置的特权字段(is_admin、account_balance、user_role)。修复:对每个端点可通过什么字段设置使用显式允许列表。默认拒绝未知字段。
过度数据暴露
返回超过必要的数据——例如,在响应公开个人资料请求时返回完整的用户对象,包括哈希密码、内部ID和管理员标志。修复:为每个端点定义明确的响应模式。只返回客户端合法需要的字段。避免直接从ORM返回模型对象。
缺少速率限制
身份验证端点没有速率限制的API容易受到凭证填充攻击(自动尝试大量用户名/密码组合)。数据端点没有速率限制时,抓取和拒绝服务攻击微不足道。修复:对所有端点限速,尤其是身份验证端点。对重复的认证失败尝试使用指数退避。
JWT漏洞
常见的JWT错误:接受”none”算法(攻击者移除签名)、使用弱密钥(可暴力破解)、不验证过期时间(接受已过期的令牌)、信任令牌头中指定的算法。修复:使用健壮的JWT库(而非手动实现),明确指定允许的算法,验证包括exp在内的所有声明,并轮换密钥。




