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

Failed DOM-based XSS. Inserting script throght innerHTML

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

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

我的问题:是否可以按照我示例中介绍的方式进行基于 DOM 的 XSS 攻击。如果不是,那么我应该改变什么?

顺便说一句。 如果您知道一些基于 DOM 的 XSS 的好例子,请在评论中 post。

使用好的 ol' 图像:

<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

简述:您无法按照示例中的方式进行基于DOM 的XSS 攻击。

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

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

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

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

如图所示 fiddle .