OWASP 应用程序安全验证标准 4.0.3
控制项模式应用安全验证标准是一份应用安全需求或测试清单,可供架构师、开发人员、测试人员、安全专家、工具供应商和用户用来定义、构建、测试和验证安全应用程序。
验证应用程序是否具备防御 HTTP 参数污染攻击的能力,尤其是在应用程序框架对请求参数的来源(GET、POST、cookie、头部或环境变量)不加区分时。
确认框架能防止批量参数分配攻击,或者应用程序有相应的防护措施来防止不安全的参数分配,例如将字段标记为私有或采取类似措施。(C5)
验证所有输入(HTML 表单字段、REST 请求、URL 参数、HTTP 头、Cookie、批处理文件、RSS 源等)是否使用正向验证(允许列表)进行验证。(C5)
验证结构化数据是否为强类型,并根据定义的模式进行验证,包括允许的字符、长度和模式(例如信用卡号码、电子邮件地址、电话号码,或验证两个相关字段是否合理,例如检查郊区和邮政编码是否匹配)。(C5)
验证 URL 重定向和转发仅允许出现在允许列表中的目标,或在重定向到潜在不受信任的内容时显示警告。
确认来自所见即所得编辑器或类似工具的所有不受信任的 HTML 输入已通过 HTML 消毒库或框架功能正确消毒。(C5)
验证非结构化数据已被清理,以执行安全措施,例如允许的字符和长度。
验证应用程序在将用户输入传递给邮件系统之前是否进行了清理,以防止 SMTP 或 IMAP 注入。
确保应用程序避免使用 eval() 或其他动态代码执行功能。如果没有替代方案,任何包含的用户输入必须在执行前进行清理或沙箱处理。
通过确保任何被包含的用户输入都经过清理或沙箱处理,来验证应用程序防护模板注入攻击的能力。
验证应用程序是否能够防护 SSRF 攻击,通过验证或清理不可信的数据或 HTTP 文件元数据,如文件名和 URL 输入字段,并使用协议、域名、路径和端口的允许列表。
验证应用程序是否对用户提供的可缩放矢量图形(SVG)可脚本内容进行清理、禁用或沙箱处理,特别是与由内联脚本和 foreignObject 引起的跨站脚本(XSS)相关的内容。
验证应用程序是否对用户提供的可脚本或表达式模板语言内容(如 Markdown、CSS 或 XSL 样式表、BBCode 或类似内容)进行清理、禁用或沙箱处理。
验证输出编码是否与解释器和所需上下文相关。例如,根据上下文需要,使用专门用于 HTML 值、HTML 属性、JavaScript、URL 参数、HTTP 头、SMTP 等的编码器,特别是针对不可信输入(例如包含 Unicode 或撇号的名称,如 ねこ 或 O'Hara)。(C4)
验证输出编码是否保留用户选择的字符集和区域设置,以确保任何 Unicode 字符点都是有效且安全处理的。(C4)
验证上下文感知的输出转义(最好是自动的,最坏情况下是手动的)是否能防护反射型、存储型和基于 DOM 的 XSS。(C4)
验证数据选择或数据库查询(例如 SQL、HQL、ORM、NoSQL)是否使用参数化查询、ORM、实体框架,或以其他方式防止数据库注入攻击。(C3)
确认在没有使用参数化或更安全的机制时,采用了特定上下文的输出编码来防止注入攻击,例如使用 SQL 转义来防止 SQL 注入。(C3, C4)
验证应用程序是否能够防护 JSON 注入攻击、JSON eval 攻击以及 JavaScript 表达式求值攻击。(C4)
验证应用程序是否能防护LDAP注入漏洞,或者是否已经实施了防止LDAP注入的特定安全控制措施。(C4)
验证应用程序是否能防止操作系统命令注入,并确保操作系统调用使用参数化的 OS 查询或使用上下文命令行输出编码。(C4)
验证应用程序是否能够防护本地文件包含(LFI)或远程文件包含(RFI)攻击。
验证应用程序是否能够防止 XPath 注入或 XML 注入攻击。(C4)
验证应用程序是否使用内存安全的字符串、更安全的内存拷贝和指针运算来检测或防止栈、缓冲区或堆溢出。
确保格式字符串不会接收可能具有敌意的输入,并且是常量。
验证是否使用了符号、范围和输入验证技术来防止整数溢出。
验证序列化对象是否使用完整性检查或加密,以防止恶意对象创建或数据篡改。(C5)
验证应用程序是否正确限制 XML 解析器仅使用最严格的配置,并确保禁用解析外部实体等不安全功能,以防止 XML 外部实体(XXE)攻击。
验证在自定义代码和第三方库(如 JSON、XML 和 YAML 解析器)中是否避免对不可信数据进行反序列化,或对其进行保护。
请确保在浏览器或基于JavaScript的后端解析JSON时,使用JSON.parse来解析JSON文档。不要使用eval()来解析JSON。