为啥要在 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】:您应该考虑以下几点:
<
是<
和&gt;
是>
您可以看到&amp;
被用于指示转义点。
因此,如果您想输入&amp;
而不是&amp;
,浏览器(解析器)可能会将其视为转义点。
这就是为什么您需要使用&amp;
而不是&amp;
。
【讨论】:
感谢您的回复,但是我仍然无法弄清楚是否存在允许用户输入字符 & 的漏洞。这是一个逃生点,但我认为它不能让注入新标签或属性成为可能。还是我犯了什么错误?&amp;
没有打开任何 xss 漏洞。但你应该逃脱它以逃脱逃脱者。
但是你应该在你的后端代码中考虑这个&amp;
。假设您正在通过用户输入在系统上运行命令。所以whoami && sudo rm -rf /*
是一个风险。逃避和消毒是防止它的唯一方法。以上是关于为啥要在 XSS 预防中将 & 转换为 & ?的主要内容,如果未能解决你的问题,请参考以下文章
在javascript中将表单数据保存为xml时防止跨站点(XSS)
pikachu--(htmlspecialcharshref和js输出)