为什么我不应该将用户输入放在 HTML 注释中?

信息安全 xss html
2021-08-22 16:19:53

OWASP XSS 预防备忘单列出了不应放置不受信任数据的位置

 <script>...NEVER PUT UNTRUSTED DATA HERE...</script>   directly in a script

 <!--...NEVER PUT UNTRUSTED DATA HERE...-->             inside an HTML comment

 <div ...NEVER PUT UNTRUSTED DATA HERE...=test />       in an attribute name

 <NEVER PUT UNTRUSTED DATA HERE... href="/test" />   in a tag name

 <style>...NEVER PUT UNTRUSTED DATA HERE...</style>   directly in CSS

我理解为什么不应该将数据放入其他 4 个位置,但是将用户输入放入 HTML 注释有什么危险?我认为编码>足以防止任何攻击。有没有办法在 HTML 注释中执行 JavaScript?还是另一种退出 HTML 注释的方法>

2个回答

HTML5 安全备忘单中的相关条目是:

  • 以反引号字符结束 HTML 注释:html5sec#133 (IE6, IE8)
  • 注入 XSS 或带有条件注释html5sec#115(旧 IE,IE 怪癖模式)

除此之外,用户输入可能用于将此注释更改为条件注释(仅限 IE),从而更改 DOM 或在注释之后阻止脚本的执行。这可能会以意想不到的方式改变页面的行为。

如果不受信任的数据可以是一切,我们可以注入例如--><script>alert("I just escaped the HTML comment")</script><!-- 使其出现在源代码中的示例:(<!----><script>alert("I just escaped the HTML comment")</script><!---->注意空注释)