2012-02-23 69 views
5

在Chrome上,發佈包含域名稱的數據(也請注意兩個頁面上缺少javascript)後發生錯誤Refused to execute a JavaScript script. Source code of script found within request.在發佈後忽略基本標記

badpage1.html

<form action="/badpage2.html" method="post"> 
<input type="hidden" name="name" value="href=%22http://www.w3.org/%22"/> 
<input type="submit" name="submit"/> 
</form> 

badpage2.html

<!DOCTYPE html> 
<html> 
    <head> 
     <base href="http://www.w3.org/"/> 
    </head> 
    <body> 
     <img src="Icons/w3c_home" alt=""> 
    </body> 
</html> 

如果你直接去badpage2.html圖像將顯示,但如果你通過badpage1.html去它,圖像將不顯示(基本標記不起作用)。

這是Chrome XSS檢測中的錯誤嗎?如果不是,我怎麼會繞過這個?編碼發佈的數據似乎很愚蠢,以繞過此過濾器。

編輯:

在我的情況下,發送的崗位價值是更新頁面的內容的一部分。如果包含碰巧包含在<base>中使用的域名(如本例所示),則會觸發XSS檢測,從而禁用<base>標記。

+0

更多關於此這裏 - http://stackoverflow.com/questions/1547884/refused-to-execute-a-javascript-script-source - 腳本內發現的代碼 – simshaun 2012-02-24 00:20:40

+0

@simshaun我看到了,但在這種情況下,XSS是*意圖*(因爲它是一個CMS編輯器)。服務器可以發送一個頭文件或告訴Chrome瀏覽器禁用這些類型的檢查嗎? – 2012-02-24 00:26:53

+0

我唯一能找到的是http://lwn.net/Articles/360424/,它指向一些[bug](https://bugs.webkit.org/buglist.cgi?keywords=XSSAuditor&resolution=--- )在過濾器中。不過,猜測過濾器的工作原理不僅僅是腳本,所以錯誤信息很混亂。真正的問題是將基礎href設置爲外部域。 AFAIK,這違反了大多數瀏覽器的安全模式。不知道是否有一個可靠的解決方案,即使如此,可能不是一個好主意(在我看來)。您是否可以不預先處理頁面以將完整的URL放入任何相關的src或href屬性中? – simshaun 2012-02-24 00:39:39

回答

3

我發現我可以發送自定義HTTP標頭X-XSS-Protection在由於保護而被搞亂的頁面上。

我用下面的代碼爲我的PHP解決方案:

header("X-XSS-Protection: 0");