确定API安全评估的范围
在API发布之前,需要进行有针对性的安全评估,涵盖所有组件:入口点、请求处理、数据存储和日志记录机制。评估范围应包括核心功能、边界情况、错误处理和服务间通信。明确定义API中哪些端点在范围内、它们处理哪些数据类型以及与部署环境最相关的威胁模型。
OWASP Top 10建立了行业公认的Web应用程序关键安全风险,并提供了识别这些风险的标准化方法。采用此参考标准作为评估的基础,确保关注最有影响力的漏洞,并帮助在组织内建立安全开发文化。
身份验证机制和令牌管理的验证
确保API实现了强大的身份验证机制:JWT令牌必须使用密码学上强大的签名算法、具有短生命周期(15-60分钟)且生成过程安全。验证刷新令牌是否安全存储、具有比访问令牌更长的过期时间,以及是否定期轮换。测试完整的身份验证流程,包括初始登录、令牌刷新和会话终止。
进行测试以检测日志、URL参数和标头中的凭证泄露。验证API不会在错误响应中返回敏感数据(密码、令牌)。测试令牌撤销机制,确保过期或已撤销的令牌能够真正阻止资源访问。验证令牌声明是否在服务器端进行验证,并且永远不信任客户端声明而不进行验证。
- 测试使用过期或无效令牌的尝试
- 验证源代码和配置文件中不存在硬编码凭证
- 验证服务器端令牌过期和时间戳验证
输入验证和注入攻击防护
实现所有输入的基于白名单的验证,而不是黑名单方法。所有参数、标头和请求体必须在处理前验证其类型、长度、格式和内容。使用能自动拒绝意外数据格式(如严格JSON或XML解析)的解析器。为所有API请求定义清晰的模式,并强制严格遵守这些模式。
测试对SQL注入、命令注入、XPath注入和LDAP注入攻击的防护。验证所有数据库操作都使用参数化查询或预处理语句。检查对特殊字符、Unicode序列和编码数据(base64、URL编码)的处理。使用极长字符串、空字节和格式错误的数据进行边界值测试。
- 通过查询参数、路径段和请求体测试SQL注入向量
- 验证正确处理空字节、换行符和特殊字符
- 验证文件上传大小限制、类型限制和内容扫描(如支持文件操作)
敏感数据保护和加密
确保客户端和服务器之间的所有通信使用HTTPS和TLS 1.2或更高版本。验证证书有效、未过期且由受信任的证书颁发机构签名。确保API不允许未加密的HTTP连接,并正确强制HTTPS重定向。如果适合您的威胁模型,测试证书固定,并验证证书验证无法被绕过。
验证敏感数据(个人可识别信息、密码、支付凭证)未被记录、缓存或以明文存储。确保使用现代算法(bcrypt、scrypt、Argon2)和适当盐值对密码进行哈希。如果数据包含机密信息,必须对静态数据进行加密。对高度敏感的数据元素实现字段级加密。
- 验证服务器端点的TLS版本和配置
- 扫描代码库中敏感数据元素的日志记录
- 验证密码哈希和数据加密使用了正确的密码函数
错误处理、日志记录和安全监控
API必须返回适当的HTTP状态码(客户端错误返回400,服务器错误返回500),不暴露内部系统细节。错误消息不得披露数据库结构、文件路径、库版本或其他对攻击者有用的技术信息。为最终用户使用通用错误消息,同时为管理员保持详细日志。为身份验证失败、授权失败和输入验证失败实现单独的错误响应。
确保所有重要事件(身份验证尝试、授权决定、数据修改、安全异常)都记录在日志中,包含时间戳、用户标识符和源IP地址。日志必须安全存储,防止未授权访问和修改。针对可疑活动(如重复的身份验证失败尝试、未授权的访问尝试或异常的数据访问模式)实现告警。
- 验证返回给客户端的错误响应中不存在堆栈跟踪
- 确认所有身份验证尝试(成功和失败)都被记录
- 检查日志不包含用户密码、令牌或其他凭证
测试方法和发布前验证规划
使用标准化的测试方法,如NIST SP 800-115和OWASP Web Security Testing Guide中所述的方法。这些框架为规划、实施和维护技术安全测试过程提供了实用建议。在发布之前,进行自动化漏洞扫描和手动测试,重点关注应用逻辑、复杂交互场景和授权边界。
创建涵盖所有API端点、不同用户角色、边界情况和失败场景的综合测试计划。测试应包括功能验证(代码返回正确结果)、安全测试(系统受到保护免受利用)和性能测试(系统在负载下保持稳定)。记录所有识别的安全问题、其严重性分类和补救状态,然后再进行最终发布。建立跟踪安全发现及其解决方案的流程。
- 使用OWASP Top 10作为优先排序安全检查的基础
- 结合自动化扫描工具、手动代码分析和逻辑测试
- 为每个识别的威胁场景创建明确的测试用例