[英]XSS: Why does an alert get fired when this javascript string is assigned?
我正在调查一个XSS问题,可以在以下简单的html文件中重复该问题,该文件在加载时显示的警报值为“ 1”。
为什么这样做? title
字符串中包含一个警报脚本标签,但令我惊讶的是浏览器呈现了它,因为</script>
标签位于字符串中?
<html>
<head>
<script>
var title = "</script><svg/onload=alert(1)>";
</script>
</head>
<body></body>
</html>
编辑:注意,我已将示例简化为简单的字符串分配。
由于title
字符串中的</script>
结束了脚本,因此以下svg
是HTML的一部分。
为了防止这种情况:
不要使用内联脚本,或者
如果这样做,则您在其中呈现的任何基于用户源的输入都不必包含</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.