这篇OWASP 文章提到“使用数据验证,只能检测和阻止反射型 XSS,不能检测持久型 XSS,如果在请求的参数中发送部分攻击,则基于 DOM 的 XSS 只能受到限制。” 为什么会这样?
我了解一旦恶意脚本存储在应用程序中,现在任何 GET/POST 请求都不会像恶意的,但脚本将在受害者端执行。然而,要执行持久性 XSS,攻击者必须向服务器发送一个看似恶意的请求,该请求应该被 WAF 感知,因此应该停止执行。
这篇OWASP 文章提到“使用数据验证,只能检测和阻止反射型 XSS,不能检测持久型 XSS,如果在请求的参数中发送部分攻击,则基于 DOM 的 XSS 只能受到限制。” 为什么会这样?
我了解一旦恶意脚本存储在应用程序中,现在任何 GET/POST 请求都不会像恶意的,但脚本将在受害者端执行。然而,要执行持久性 XSS,攻击者必须向服务器发送一个看似恶意的请求,该请求应该被 WAF 感知,因此应该停止执行。
如果您根据应用程序严格调整 WAF,以便它可以完全区分特定输入字段的有效输入和无效输入,那么您应该能够检测到通过使用输入字段来注入持久性 XSS 的尝试。
但是,通常 WAF 并没有那么紧密地适应特定的应用程序,在这种情况下只使用一些启发式方法来检测常见的攻击。除此之外,持久性 XSS 可以有不同的来源,甚至不需要通过使用输入字段甚至使用 Web 界面将其添加到应用程序中。例如,亚马逊 Kindle 商店中有一个存储型 XSS 漏洞,该漏洞是由图书描述元数据中的脚本引起的:Amazon.com Stored XSS via Book Metadata。
我认为这一点并不理想,因为 WAF 确实可以捕获一些持续的 XSS 攻击。
但至少有两个问题:
');alert('1是否是安全输入(或如何处理输入,以及是否通过编码使其安全)。