繁体   English   中英

XSS:分配此javascript字符串后,为什么会触发警报?

[英]XSS: Why does an alert get fired when this javascript string is assigned?

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

为什么这样做? title字符串中包含一个警报脚本标签,但令我惊讶的是浏览器呈现了它,因为</script>标签位于字符串中?

test.html

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

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

由于title字符串中的</script>结束了脚本,因此以下svg是HTML的一部分。

为了防止这种情况:

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

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

对于#2,编码实体将起作用,或者仅在内容中的斜杠前面插入反斜杠。 如果这样做(服务器端),那么您将拥有:

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

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

...不会发出警报。 (我只添加了一个反斜杠,但是,当然,它在字符串文字中,因此可以转义。)

但是 ,如果您要在页面中放置不受信任的内容,请阅读owasp.org XSS(跨站点脚本)预防速查表 ,这将为您提供良好的服务。 上面的内容对于这一特定用途可能就足够了,但是您可能想走得更远,并且您当然希望对包含在HTML(而不是脚本)元素,属性(甚至是HTML文本,甚至是HTML元素)中的任何内容进行HTML转义。如果它们是onclick等),等等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM