Javascript 何时执行动态脚本?

Javascript 何时执行动态脚本?,javascript,xss,Javascript,Xss,我当时正在做GoogleXSS游戏(),但我不太明白为什么level 2没有按照我预期的方式工作。即使提示说脚本标记不起作用,我也不知道为什么。我的问题基本上是何时执行动态脚本标记,这是否因浏览器而异 我尝试了一些简单的方法,比如: <script>alert();</script> alert(); 虽然它将元素添加到页面中,但它并没有达到我所希望的效果 我发现这篇文章也有同样的问题,但解决方案只是一个答案,而不是一个解释: 如果一个站点只清理脚本标记,但允许其他H

我当时正在做GoogleXSS游戏(),但我不太明白为什么level 2没有按照我预期的方式工作。即使提示说脚本标记不起作用,我也不知道为什么。我的问题基本上是何时执行动态脚本标记,这是否因浏览器而异

我尝试了一些简单的方法,比如:

<script>alert();</script>
alert();
虽然它将元素添加到页面中,但它并没有达到我所希望的效果

我发现这篇文章也有同样的问题,但解决方案只是一个答案,而不是一个解释:

如果一个站点只清理脚本标记,但允许其他HTML,那么它将向XSS打开自身。级别2中的提示是消息窗口中具有一些HTML格式(斜体、颜色等)的文本,因此这里的假设是允许使用HTML标记

因此,您可以输入以下内容

<i>Hello Xss</i>
Hello Xss
进入消息窗口,以斜体显示文本。但是DOM元素可以附加一个事件处理程序——您可以将可执行JavaScript包含到事件处理程序中,而无需任何脚本标记

尝试在消息窗口中输入以下内容:

<i onmouseover="alert(1)">Hello Xss</i>
Hello Xss

提交消息后,将鼠标悬停在消息文本上。

问题的答案是,
通过.innerHTML添加的标记不会执行

发件人:

安全注意事项

在网页中插入文本的innerHTML并不少见。这会带来安全风险

var name=“John”;
//假设el是一个HTMLDOM元素
el.innerHTML=name;//在这种情况下是无害的
// ...
name=“警报(‘我是恼人警报中的约翰’)”;
el.innerHTML=name;//在这种情况下是无害的
尽管这看起来像是跨站点脚本攻击,但其结果是无害的。HTML5指定不应执行通过innerHTML插入的标记

但是,有一些方法可以在不使用元素的情况下执行JavaScript,因此无论何时使用innerHTML设置无法控制的字符串,都存在安全风险。例如:

var name=”“;
el.innerHTML=name;//显示警报

我可以告诉您,通过
.innerHTML添加
元素不会执行它们;)
var name = "John";
// assuming el is an HTML DOM element
el.innerHTML = name; // harmless in this case

// ...

name = "<script>alert('I am John in an annoying alert!')</script>";
el.innerHTML = name; // harmless in this case
var name = "<img src=x onerror=alert(1)>";
el.innerHTML = name; // shows the alert