2013-04-03 55 views
4

我'想知道從規格報價: (https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html爲什麼禁止內聯腳本(內容安全策略)?

謀取最大利益,作者將需要移動所有內嵌腳本和樣式外的線路,例如到外部腳本,因爲用戶代理無法確定內聯腳本是否被攻擊者注入。

找出所有內聯腳本是一項時間繁重的任務。

我的問題是從安全的角度出發。通過將所有內聯腳本(例如JavaScript)提取到外部源,您是否真的獲得任何安全優勢?

謝謝

+0

CSP 1.1計劃提供一些功能,允許您將各個腳本塊列入白名單。 (通過腳本隨機數或腳本哈希)。這仍然是一條出路,並且刪除內聯腳本仍然是您最安全的途徑。 – oreoshake

回答

6

的關鍵部分是

用戶代理無法確定一個內嵌腳本是否由攻擊者注入。

爲了提供保護,CSP必須防止攻擊者控制的子字符串導致代碼運行。由於用戶代理不知道HTML的哪些部分是由不受信任的輸入指定的,哪些來自可信開發人員編寫的模板,因此它必須假設最差 - 任何屬性或元素都可以由攻擊者控制。

您是否真的通過將所有內聯腳本(例如JavaScript)提取到外部源來獲得任何安全性好處?

否。提取要運行的腳本不會提供任何安全性好處,它只是讓您在仍使用CSP時運行所需的腳本。

安全性好處來自於能夠調用瀏覽器的HTML解析器,而不會無意中執行濫用域權限或竊取機密的腳本。

+0

刪除所有內聯腳本確保您永遠不會將動態內容放入腳本標記中(這通常會導致不良行爲)。 。是否這是一個安全利益是相當有爭議:) – oreoshake

+0

@oreoshake,一般同意「刪除所有內聯腳本」,但不是當與內容安全警察一起使用時,policy.allowsInlineScript是虛假的,這是OP暗示的。 –