基于DOM的XSS失败。插入脚本throght innerHTML

时间:2016-06-02 05:27:48

标签: javascript dom xss

我想向学生展示基于DOM的XSS攻击的例子。我认为通过innerHTML插入恶意脚本就足够了。但令我惊讶的是,当我插入脚本时,它似乎没有被调用。

示例在这里https://jsfiddle.net/vo9baffu/6/ example

我的问题:是否有可能以我的示例中提供的方式执行基于DOM的XSS攻击。如果不是那么方式,我应该改变什么?

顺便说一句。 如果你知道一些基于DOM的XSS的好例子,请发表评论。

2 个答案:

答案 0 :(得分:2)

使用好的'图像:

<img src="/bad.png" onerror="alert(-2)" />

完整代码:

function showName() {
  tt = "script";
  badCode = "John<img onerror='alert(-2)' src='/bad.png'>";
  console.log(badCode);
  document.getElementById("name").innerHTML = badCode;
}

/bad.png应该触发onerror

和你的JSFiddle

答案 1 :(得分:1)

简要:您无法以示例中显示的方式进行基于DOM的XSS攻击。

您必须在HTML中包含jQuery并使用html()方法。这将完全满足您的要求,因为html()方法将评估嵌入在脚本标记中的代码。

使用纯JavaScript,您无法进行XSS攻击,因为您插入的脚本在大多数情况下都不会执行。发生这种情况,因为内联脚本仅在解析原始页面时执行。

您可以使用img标记和错误事件向学生展示XSS攻击,如下所示:

<img src="whatever.png" onerror="alert('XSS')" />

如此fiddle所示。