它比問題中描述的要複雜得多,因爲CSP3規範還引入了the worker-src
directive。但該規範給出了the following guidance:
的child-src
模型實際上已經被變更:
- 的
frame-src
指令,這是在CSP 2級過時,已經undeprecated,但繼續推遲到child-src
如果不目前(依次依次爲default-src
)。
- 已添加指令
worker-src
,如果不存在則推遲到script-src
(它同樣依次默認爲src)。
child-src
現已棄用。
這是在https://w3c.github.io/webappsec-csp/,這是一個編輯的草案,但什麼是你應該總是對目前的規範要求進行磋商。原因:您不能相信https://www.w3.org/TR/CSP/是最新的(並且一般而言,您不能相信https://www.w3.org/TR下的任何內容都是最新的),編輯器的草稿是瀏覽器實現者實際實現的內容(他們不等待實現直到按照https://www.w3.org/TR發佈的東西)。
反正child-src
指令被棄用的原因是its effect is specified as:
的孩子-SRC指令管轄的嵌套瀏覽上下文(例如和<frame>
導航)和工人執行上下文的創建。
在實際中的問題是:iframe
與工作人員腳本非常不同。因此,這就是爲什麼worker-src
被添加的原因,並且爲什麼frame-src
未被棄用(因爲您確實需要一個單獨的指令來指定iframe
元素的策略)以及爲什麼child-src
已被棄用(因爲您確實不希望將一個策略應用於iframe
元素和工人腳本)。
那麼在現代(減2版本)瀏覽器中工作的指令集合是什麼?
看來,答案似乎取決於你想要爲什麼指定一個策略。
- 如果您的需求很簡單,所以你不想爲
iframe
元素和腳本有不同的政策,那麼就使用default-src
指定兩個相同的策略。
- 如果您的需求更加複雜,並且您希望
iframe
元素的策略與其他資源的策略不同,則使用frame-src
。同樣,如果您需要的策略與其他資源的策略不同,請使用script-src
。
- 如果您不希望工作人員腳本的策略與其他腳本的策略不同,那麼您只需提供
script-src
策略即可,並且可以在此停止。
- 如果您要做需要工作人員腳本的策略不同於其他腳本的策略,那麼除了提供
script-src
策略之外,還應提供worker-src
策略。 worker-src
一個不會影響瀏覽器,但是當瀏覽器確實會添加支持時,它將會適應未來。
PS:這是甚至合法的「undeprecate」的東西?
是的。雖然我不記得有沒有看到其他規範或工作組這樣做,但在這種情況下這是正確的做法 - 因爲CSP規範作者和工作組意識到child-src
是一個錯誤,而frame-src
實際上是必需的,它這是一個錯誤,以貶低它。
因此,他們解開了這些錯誤 - 並且相對較快。爲什麼它在這種情況下工作的一部分是:frame-src
沒有被棄用足夠長的時間讓瀏覽器不得不放棄對它的支持,而且很多Web開發人員從未開始使用child-src
開始。