我想向学生展示基于DOM的XSS攻击的例子。我认为通过innerHTML插入恶意脚本就足够了。但令我惊讶的是,当我插入脚本时,它似乎没有被调用。
示例在这里https://jsfiddle.net/vo9baffu/6/ example
我的问题:是否有可能以我的示例中提供的方式执行基于DOM的XSS攻击。如果不是那么方式,我应该改变什么?
顺便说一句。 如果你知道一些基于DOM的XSS的好例子,请发表评论。
答案 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所示。