1

我正在構建一個chrome擴展,我需要從網頁中獲取和解析一些html。決定使用jQuery的。解析具有內聯事件處理函數的HTML

$(htmlString).find(".some-table"); 

問題是我在運行此代碼時收到以下警告。

拒絕執行內聯事件處理程序,因爲它違反了以下內容安全策略指令:「script-src」self'chrome-extension-resource:「。 「內聯不安全」關鍵字,散列('sha256 -...')或一個隨機數('nonce -...')是啓用內聯執行所必需的。

看起來「htmlString」包含一些內聯事件處理程序,在解析它時,chrome會拋出此警告。
我無法控制「htmlString」裏面的內容,只需要從中檢索一些信息即可。有沒有更好的方法來做到這一點?

+0

這是否阻止它工作,或者它只是一個警告? – 2015-02-24 14:08:57

+0

您確定此操作_specifically_導致他? – Xan 2015-02-24 14:23:44

+0

@JuanMendes這些只是警告(相應地修改問題)。 – 2015-02-24 17:46:08

回答

0

使用明確的$.parseHTML()。引用文檔:

接受HTML字符串的大多數jQuery API都將運行包含在HTML中的腳本。 jQuery.parseHTML不會在解析的HTML中運行腳本,除非keepScripts顯式爲true。

但是,即使這樣做也不安全。

但是,在大多數環境中仍可以間接執行腳本,例如通過<img onerror>屬性。來電者應該知道這一點,並通過清除或轉義來自諸如URL或Cookie之類來源的任何不可信輸入來防範。

因此,雖然它可能有助於特定的輸入,但您應該考慮是否顯式創建DOM節點是您真正需要的。它可能會創建各種討厭的邊緣案例。