2012-11-19 85 views
2

我試圖修改我的web軟件以使用內容安全策略。當我沒有它編譯時,一切運行良好。當我包括CSP頭,鍍鉻標誌在兩個地方的錯誤(使用Chrome開發人員工具):jquery庫中的「字符串不允許的代碼生成」

  • A「拒絕,因爲它違反了內容 安全策略執行內嵌腳本...」錯誤在第一每個ASPX或HTML文件的行 - 即使沒有內聯JavaScript!
  • 「從字符串不允許的上下文代碼生成」的錯誤 - 這是在jquery-1.8.3.min.js文件中記錄的 ,但似乎來自 我寫了一些我正在迭代的JQuery數據從網絡服務下載 以在頁面上生成項目。

因此,有兩個問題:爲什麼我總是被告知每個文件都違反了,即使它只是一個純靜態HTML文件?

其次,內容安全性是否真的意味着當使用JQuery生成HTML時我不能使用字符串 - 即使它在專用的.js文件中?我查看了整個網絡的信息,這個問題實際上並沒有解決。那麼......這裏的規則是什麼?

我真正想要的是防止內聯JavaScript和B)加載外部JS文件。

任何幫助將非常感謝!

UPDATE:當我將JQuery/JQueryUI升級到1.8.2/1.9.1時,字符串錯誤消失了。我之前使用的版本只有大約一個月的時間,所以這似乎是JQuery最近的一次改進。我不能肯定這是JQuery,雖然我一直在做其他更改,但它是有意義的,如果你可以在最近的JQuery。

回答

3

默認情況下,內容安全策略塊evaleval-like結構(new FunctionsetTimeout([STRING], ...)等);它們可能與內聯腳本一樣危險。如果您想允許eval,則需要將白名單'unsafe-eval'作爲腳本的公認來源。看起來像這樣:

Content-Security-Policy: script-src 'self' 'unsafe-eval' https://script.com 

規範的相關部分是http://www.w3.org/TR/CSP/#script-srchttp://www.html5rocks.com/en/tutorials/security/content-security-policy/#eval-too也可能有所幫助。

關於錯誤消息,我建議使用加那利。我們在過去的一兩個月裏大幅改進了錯誤信息;我希望您在不久的將來能夠在Stable中獲得更好的調試體驗。如果您仍然在Canary中發現錯誤,但是沒有提供足夠的信息來調試問題,請提交錯誤(http://new.crbug.com/)並在此處發佈ID。我會確保有人看着它。

我很高興聽到您在試用CSP!

+0

謝謝邁克。從2001年開始使用WebForms開始,並且已經遷移到純Ajax/JQuery/WCF,但我希望這些好處值得。 –

+1

順便說一句 - 「從字符串代碼生成...」錯誤消失了,一旦我升級JQuery/JqueryUI到1.8.2和1.9.1 –