【发布时间】:2020-07-13 09:08:32
【问题描述】:
我正在处理OWASP Cross Site Scripting Prevent Cheat Sheet。在规则 #3 中它说:
请注意,有些 JavaScript 函数永远无法安全地使用不受信任的数据作为输入 - 即使 JAVASCRIPT ESCAPED!
<script>
window.setInterval('...EVEN IF YOU ESCAPE UNTRUSTED DATA YOU ARE XSSED HERE...');
</script>
澄清一下:
- 我知道使用
setInterval等。 您的自己的内容是安全的。 - 我知道必须验证、转义和/或清理外部内容。
我的理解是,第 3 条规则在某种程度上暗示,如果您使用 setInterval,攻击者可以绕过您能想到的任何 XSS 过滤器。
你有一个例子来说明它们的含义吗?使用setInterval 将永远无法避免哪种 XSS 攻击?
这里有一个类似的问题:.setinterval and XSS 不幸的是,答案对我没有帮助。
【问题讨论】:
-
setInterval(userInput, 1000)其中userInput = "alert('XSS')" -
setInterval在传递字符串时与eval没有任何不同... -
@customcommander 如果您使用您选择在某些输入上使用
eval的字符串调用setInterval。如果该输入来自用户,则您选择在您的应用程序中运行用户想要的任何代码。用户输入从不值得信任并且总是被认为是不安全的。由于您还被选为始终将其视为可运行代码,因此没有任何转义可以保护您 - 您已经委托自己始终处于防御状态。您插入一个安全漏洞,攻击者可以利用另一个漏洞。你只是在做出反应,永远不会完全覆盖。 -
"即使 JAVASCRIPT ESCAPED" 为假。当然,可以正确地转义用户输入以用作传递给
setInterval或eval的代码sn-ps 中的数据。很难正确地做到这一点,而且大多是无用的。 (当然,将用户输入用作代码本身绝不是一个好主意)。 -
@Bergi 我会说,足够转义以在
eval中运行的用户输入不值得在eval中运行,因为您很可能暴露了非常有限的功能 - 足以能够准备用户可以选择的功能,而不必作为代码输入。实际的“选择”可能是一个字符串的形式,该字符串被标记/解析以便调用正确的功能,但仍然。
标签: javascript security xss