为啥要在 XSS 预防中将 & 转换为 & ?

Posted

技术标签:

【中文标题】为啥要在 XSS 预防中将 & 转换为 & ?【英文标题】:Why should I convert & to & in XSS prevention?为什么要在 XSS 预防中将 & 转换为 & ? 【发布时间】:2018-10-18 00:37:47 【问题描述】:

最近我一直在思考标题中提到的一个问题。

正如OWASP 在他们的规则 #1 中建议我们的那样,在将用户输入插入 html 页面之前应该做一些 HTML 转义。

但是,在以下情况下:

用户输入

如果我只转义 4 个字符: ' ",而不是 &,是否有任何有效负载可能导致 XSS?请注意 userInput 中的 " 无法关闭属性。

或者有没有出现字符&必须转义的情况,否则会有XSS漏洞存在?

【问题讨论】:

【参考方案1】:

您应该考虑以下几点:

<<>>

您可以看到& 被用于指示转义点。

因此,如果您想输入& 而不是&,浏览器(解析器)可能会将其视为转义点。

这就是为什么您需要使用& 而不是&

【讨论】:

感谢您的回复,但是我仍然无法弄清楚是否存在允许用户输入字符 & 的漏洞。这是一个逃生点,但我认为它不能让注入新标签或属性成为可能。还是我犯了什么错误? & 没有打开任何 xss 漏洞。但你应该逃脱它以逃脱逃脱者。 但是你应该在你的后端代码中考虑这个&。假设您正在通过用户输入在系统上运行命令。所以whoami && sudo rm -rf /* 是一个风险。逃避和消毒是防止它的唯一方法。

以上是关于为啥要在 XSS 预防中将 & 转换为 & ?的主要内容,如果未能解决你的问题,请参考以下文章

JSP/Servlet Web 应用程序中的 XSS 预防

在javascript中将表单数据保存为xml时防止跨站点(XSS)

pikachu--(htmlspecialcharshref和js输出)

如何预防应用程序中的XSS漏洞

为啥要在字段上使用 LEFT JOIN,然后在 WHERE 子句中将其过滤掉?

为啥我不能在通知中将数组转换为 AnyObject?