2009-10-10 88 views
79

WebKit中我得到我的JavaScript以下錯誤:拒絕執行JavaScript腳本。腳本的源代碼中發現的請求

拒絕執行一個JavaScript腳本。在請求中找到腳本的源代碼。

該代碼適用於JavaScript紡紗器,請參閱ASCII Art

用於正常工作的代碼,並且在Camino和Firefox中仍然正常工作。該錯誤似乎只在通過POST保存頁面然後通過GET檢索時纔會拋出。它發生在Chrome/Mac和Safari/Mac中。

任何人都知道這意味着什麼,以及如何解決這個問題?

+0

嗯,可能我的WebKit已更新。該頁面再次工作。還有頁面的所有舊版本(請參閱頁面底部的舊版本按鈕)。 – doekman 2009-10-11 13:59:28

+0

這個錯誤發生在w3schools的tryit編輯器中http://www.w3schools.com/js/tryit.asp?filename=tryjs_events這個腳本是第一次執行的,但是它在你點擊「編輯點擊我「按鈕。 – 2011-05-10 20:20:52

+1

如果按下「編輯並單擊我」按鈕,則textarea的內容(使用JavaScript)將通過POST發送到服務器。 Chrome會檢測到javascript已發佈到服務器,並且可能是惡意的。阻止是針對XSS攻擊的措施。 – doekman 2011-05-11 08:59:08

回答

65

這是防止XSS (cross-site scripting)攻擊的安全措施。

這發生在某些JavaScript代碼通過HTTP POST請求發送到服務器時,並且通過HTTP響應返回相同的代碼。如果Chrome檢測到這種情況,該腳本將被拒絕運行,並且您會收到錯誤消息Refused to execute a JavaScript script. Source code of script found within request

另請參閱此博文關於Security in Depth: New Security Features

+5

這將是很好的看到某種參考。 – kangax 2009-10-11 06:31:58

+0

,但這是戈納導致任何問題?這意味着如果我們忽略這個信息就可以了嗎? – samach 2011-08-04 12:03:21

+0

@Greg瀏覽器使用什麼算法來「檢測情況」?它不能只是在數據右邊尋找字符串「

129

可以通過在受影響的頁面上發送非標準HTTP標頭X-XSS-Protection來禁用此「功能」。

X-XSS-Protection: 0 
+8

謝謝!這應該得到更多的讚揚。 – 2012-04-28 20:26:31

+0

這不適合我。 – 2012-08-15 20:25:49

+2

確保觸發此錯誤的頁面與此標題一起發送,而不是提交頁面。 – 2012-08-15 20:31:15

14

簡短的回答:刷新頁面,讓您的首次提交的JavaScript後,或打將顯示您正在編輯的頁面的URL。

龍回答:因爲你填充到表單中的文本包括JavaScript和瀏覽器並不一定知道你是的JavaScript源,它是瀏覽器更安全的假設,你是不是這JS的來源,而不是運行它。

一個例子:假設我給了你一個鏈接你的電子郵件或Facebook的一些JavaScript在其中。想象一下,javascript會向你的朋友發送我的酷炫鏈接。因此,獲取該鏈接被調用的遊戲變得簡單,找到一個發送JavaScript的地方,以便它將被包含在頁面中。

Chrome和其他WebKit瀏覽器嘗試通過不執行響應中的任何JavaScript(如果它出現在請求中)來緩解此風險。我的惡意攻擊會受到挫敗,因爲你的瀏覽器永遠不會運行JS。

就你而言,你正在將它提交到表單域。表單字段的帖子將導致頁面的呈現將顯示Javascript,導致瀏覽器擔心。但是,如果您的JavaScript真正保存了,則在未提交表單的情況下點擊該頁面將允許其執行。

0

我用這個哈克PHP招就在我提交到數據庫中,但腳本之前,從我_GET要求:

if(!empty($_POST['contains_script'])) { 
    echo "<script>document.location='template.php';</script>"; 
} 

這對我來說是最廉價的解決方案呈現。

1

正如其他人所說的,這發生在HTTP響應包含也在請求中的JavaScript和/或HTML字符串時。這通常是通過將JS或HTML輸入到表單字段中引起的,但也可以通過其他方式觸發,例如手動調整URL的參數。

這樣做的問題是,有不良意圖的人可以將任何他們想要的JS作爲值,鏈接到帶有惡意JS值的URL,並導致用戶遇到麻煩。

差不多每種情況下,這可以通過HTML encoding the response固定,雖然也有例外。例如,對於<script>標籤中的內容,這不是安全的。其他具體情況可以採用不同的處理方式 - 例如,將輸入注入URL可以更好地通過URL編碼提供服務。

肯德爾·霍普金斯提到,可能有少數情況下當你真正想從表單輸入 JavaScript來執行,如創建像JSFiddle的應用程序。在這些情況下,我建議您至少在回寫代碼之前通過後端代碼中的輸入進行擦洗。之後,您可以使用他提到的方法來防止XSS阻塞(至少在Chrome中),但請注意它正在向攻擊者開放。

相關問題