javascript - XSS:为什么在分配此 javascript 字符串时会触发警报?

标签 javascript xss

我正在调查一个 XSS 问题,该问题可以在以下简单的 html 文件中复制,该文件在加载时显示值为“1”的警报。

为什么会这样? title字符串中有一个警报脚本标记,但令我惊讶的是浏览器会呈现它,因为 </script>标签在字符串中?

测试.html

<html>
    <head>
      <script>
        var title = "</script><svg/onload=alert(1)>";
      </script>
    </head>
  <body></body>
</html>

编辑:请注意,我已将示例简化为简单的字符串分配。

最佳答案

因为 </script>title里面字符串结束你的脚本,所以下面的 svg是 HTML 的一部分。

为了防止这种情况:

  1. 不要使用内联脚本,或者

  2. 如果这样做,您在其中呈现的任何 用户源输入都不需要有 </script>在里面。 (我可能会偏执,并允许 </script> 之间有空格;在 JavaScript 正则表达式中,<\s*/\s*script\s*> 带有 m 标志。)

对于#2,编码实体会起作用,或者只是在内容中的斜杠前面插入一个反斜杠。如果你这样做(服务器端),那么你会:

<html>
    <head>
      <script>
        var test = {
          "id" : 12181,
          "title" : "<\\/script><svg/onload=alert(1)>",
          "email" : null
        };
      </script>

    </head>
  <body>
  </body>
</html>

...不会提醒。 (我只添加了一个反斜杠,当然,它在字符串文字中,所以它会被转义。)

但是,如果您将不受信任的内容放在您的页面中,那么通读 owasp.org XSS (Cross Site Scripting) Prevention Cheat Sheet 将对您有好处。 .以上内容对于这一特定用途可能已经足够了,但您可能想更进一步,并且您肯定希望对包含在 HTML(而不是脚本)元素、属性中的任何内容进行 HTML 转义(它们是 HTML 文本,即使它们是 onclick 等),等等。

关于javascript - XSS:为什么在分配此 javascript 字符串时会触发警报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50842278/

相关文章:

security - 是否可以通过电子邮件地址进行 XSS 攻击?

XSS 跨站脚本 - Jsp <Input> 标签

javascript - 将函数附加到 onClick()/onPress()

javascript - 对 null 或空值使用 ng-switch

Javascript:在所见即所得编辑器中的插入符号处粘贴文本

javascript - 将 json 对象从 android(java) 传递到 Webview 中的 javascript

javascript - es6 querySelectorAll 一个类并获取它的数据属性

ruby-on-rails - link_to href 中的不安全参数值

javascript - 将 eval() 转换为 JSON.parse

javascript - 用 Javascript 构建 HTML 字符串真的不安全吗?