非常に単純な例...
<div id="cat"></div>
<script>
document.getElementById("cat").innerHTML = document.referrer;
</script>
または
<script src="' + document.referrer + '"></script>
リクエストを送信してリファラーヘッダーを追加してみましたが、ページに反映されていないようです。
更新されたブラウザーは、参照URLをエンコードします。
そのため、現在の例では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>
上記のコードは、最初のロード時にブラウザーをターゲットにリダイレクトし、2番目のロード時にXSSペイロードを返すページを使用して悪用される可能性があります。これを行う1つの方法は、サーバー側でリファラーをチェックすることです。
<?php
if($_SERVER['HTTP_REFERER'] == 'http://target.com/xss'){
print "alert('xss')";
}else{
header("location: http://target.com/xss")
}
?>
ページhttp://target.com/xssが読み込まれると、JavaScript(から) document.refererロードされますalert( 'xss')。