OWASP 应用程序安全验证标准 4.0.3
控制项模式应用安全验证标准是一份应用安全需求或测试清单,可供架构师、开发人员、测试人员、安全专家、工具供应商和用户用来定义、构建、测试和验证安全应用程序。
验证使用安全的软件开发生命周期,在开发的所有阶段都考虑到安全性。(C1)
验证在每次设计变更或冲刺计划中使用威胁建模,以识别威胁、制定应对措施、促进适当的风险响应,并指导安全测试。
确保所有用户故事和功能都包含功能性安全约束,例如“作为用户,我应该能够查看和编辑我的个人资料,但我不应该能够查看或编辑其他人的个人资料”
验证所有应用程序的信任边界、组件和重要数据流的文档和理由。
验证应用程序高层架构及所有连接的远程服务的定义和安全分析。(C1)
验证集中化、简洁(设计经济)、经过审查、可靠且可重复使用的安全控制的实施,以避免重复、遗漏、无效或不安全的控制。(C10)
向所有开发人员和测试人员确认安全编码清单、安全需求、指南或政策的可用性。
验证所有应用程序组件、服务和服务器是否使用唯一或特殊的低权限操作系统帐户。(C3)
验证应用程序组件之间的通信,包括 API、中间件和数据层,是否经过身份验证。组件应具有所需的最低权限。(C3)
确保该应用程序使用已验证的、安全的单一身份验证机制,该机制可以扩展以包含强身份验证,并且具有足够的日志记录和监控功能以检测账户滥用或泄露。
验证所有身份验证途径和身份管理 API 是否实施了一致的身份验证安全控制强度,以确保根据应用程序的风险不存在较弱的替代方案。
验证受信的执行点(例如访问控制网关、服务器和无服务器函数)是否执行访问控制。切勿在客户端执行访问控制。
[已删除,不可执行]
[已删除,重复 4.1.3]
验证应用程序是否使用单一且经过充分审核的访问控制机制来访问受保护的数据和资源。所有请求都必须通过这一单一机制,以避免复制粘贴或不安全的替代路径。(C7)
验证是否使用基于属性或特性的访问控制,即代码检查用户对某个功能/数据项的授权,而不仅仅是他们的角色。权限仍应通过角色分配。 (C7)
确认输入和输出要求清楚地定义了如何根据类型、内容以及适用的法律、法规和其他政策遵从性来处理和处理数据。
在与不受信任的客户端通信时,确保不使用序列化。如果无法避免使用,请确保执行足够的完整性控制(如果传输敏感数据,可能还需要加密)以防止反序列化攻击,包括对象注入。
验证在受信任的服务层上是否执行了输入验证。(C5)
验证输出编码是否在接近或由其预期的解释器处进行。(C4)
验证是否存在用于加密密钥管理的明确政策,并且加密密钥的生命周期是否遵循诸如 NIST SP 800-57 等密钥管理标准。
验证加密服务的使用者是否通过使用密钥库或基于 API 的替代方案来保护密钥材料和其他机密信息。
验证所有密钥和密码是否可替换,并且是否属于重新加密敏感数据的明确定义的流程的一部分。
验证架构是否将客户端机密(如对称密钥、密码或 API 令牌)视为不安全,并且从不使用它们来保护或访问敏感数据。
确认系统中使用的是统一的日志记录格式和方法。(C9)
验证日志是否安全地传输到优选的远程系统以进行分析、检测、警报和升级。(C9)
确认所有敏感数据已被识别并分类到相应的保护等级。
确保所有保护级别都有相应的保护要求集合,例如加密要求、完整性要求、保留、隐私和其他机密性要求,并且这些要求已在架构中应用。
验证应用程序是否对组件之间的通信进行加密,尤其是当这些组件位于不同的容器、系统、站点或云服务提供商时。(C3)
验证应用程序组件是否能够验证通信链路中各方的真实性,以防止中间人攻击。例如,应用程序组件应验证 TLS 证书及其链。
确认使用了源代码控制系统,并且有程序确保提交代码时附带问题或变更单。源代码控制系统应具有访问控制和可识别的用户,以便追踪任何更改。
验证所有应用程序组件的定义和文档,确认其提供的业务或安全功能。
确保所有高价值业务逻辑流程,包括身份验证、会话管理和访问控制,不共享未同步的状态。
验证所有高价值的业务逻辑流程,包括身份验证、会话管理和访问控制,是否是线程安全的,并能抵抗检查时间与使用时间的竞争条件。
[已删除,重复 12.4.1]
验证用户上传的文件——如果需要在应用程序中显示或下载——是否通过八位字节流下载提供,或者从无关的域(例如云文件存储桶)提供。实施合适的内容安全策略(CSP)以降低上传文件引发的 XSS 向量或其他攻击的风险。
通过明确的安全控制、防火墙规则、API 网关、反向代理、基于云的安全组或类似机制,验证不同信任级别组件的隔离情况。
验证是否使用二进制签名、受信任的连接和已验证的端点来将二进制文件部署到远程设备。
验证构建流水线是否会对过时或不安全的组件发出警告并采取适当的措施。
确认构建管道中包含一个构建步骤,以自动构建并验证应用程序的安全部署,尤其是在应用程序基础设施是软件定义的情况下,例如云环境的构建脚本。
验证应用程序部署是否充分进行了沙箱化、容器化和/或网络级别隔离,以延迟并阻止攻击者攻击其他应用程序,尤其是在执行反序列化等敏感或危险操作时。(C5)
验证应用程序未使用不受支持、不安全或已弃用的客户端技术,例如 NSAPI 插件、Flash、Shockwave、ActiveX、Silverlight、NACL 或客户端 Java 小程序。