2017-04-05 78 views
2

我有一個網頁(說起源= A),其中嵌入了一個iframe,從不同的域加載(如B)。 B從不同的域加載腳本腳本(各種CDN)。我的網頁A設置了非常嚴格的CSP,如:CSP子級iframe從其父級繼承了哪些內容?

default-src'none'; script-src'self'; frame-src B

B沒有設置任何CSP頭。

現在我期望子框架B繼承A的CSP規則,並且嘗試訪問各種CDN應該違反它的CSP,因爲script-src'self',但令我驚訝的是,它工作順利。我的問題是: CSP如何由子iframe繼承?如果沒有提及iframe的CSP,它是否依賴於其父框架的CSP?如果是,如何?有沒有關於它的任何文檔,我找不到任何具體的解釋上述情況的東西。

有沒有一種方法可以調試子iframe繼承的CSP?從Chrome的調試器或FF的調試器 - 通過選擇iframe,然後CSP的iframe會顯示?

回答

4

CSP如何由子iframe繼承?

不是。也就是說,不是在一般情況下(問題中的「來自不同域的負載」情況)。

但是還有其他的方法來填充iframe,並且在這些情況下CSP的工作方式不同(見下文)。

如果未提及iframe的CSP,是否依賴於其父框架的CSP?

不,它不適用於常見情況(問題中給出的「來自不同域的負載」情況)。

是否有任何文檔某處它

是的,看到Policy applicability section of the CSP2 specification,其中這樣說:

嵌入式上下文:通過iframe包含的任何資源,object,或embed

除非嵌入式資源是全局唯一標識符(或srcdoc iframe),否則嵌入式資源由與資源一起交付的策略控制。如果嵌入式資源是全局唯一標識符或iframe,它會繼承創建它的上下文策略。

A「全局唯一標識符」是一些用data: URL或其他種類的URL,這不是一個層次URL這樣的https/http URL。

所以一般情況下(形容在這個問題:「從不同的域加載」)是一種「嵌入的資源通過與資源提供的政策控制」的情況下,也就是說,它不繼承。

相反,如果iframesrcdoc iframe中,情況是非常不同的,the spec says

每當用戶代理嵌套在受保護的資源瀏覽器上下文創建iframe srcdoc文件,如果用戶代理執行對受保護資源的任何政策,用戶代理必須執行的iframe srcdoc文件這些政策也是如此。

這是一個srcdoc IFRAME 確實繼承其父的CSP政策。

+0

嗯,所以給定域B沒有任何CSP頭,這將是它的默認策略值?它不同於瀏覽器到瀏覽器?有什麼方法可以知道它 - 例如從瀏覽器控制檯或其他東西? – pranavk

+0

如果域B沒有任何CSP頭,然後在瀏覽器應用沒有CSP限制,允許,否則將被允許的腳本一切/從任何地方樣式表,在任何URL,內嵌腳本/樣式表等,以及允許瀏覽器通常允許的所有非分層方案。這並不因瀏覽器而異。如果你想在的是一個CSP「默認策略」方面來考慮,那麼它基本上相當於像'默認-SRC *'不安全-EVAL'不安全內聯「不安全動態」數據:文件系統:約:BLOB :WS:WSS:' – sideshowbarker

+0

我做一些測試,像邊緣嵌入式I幀幀繼承-SRC /兒童SRC不管是什麼,在我看來。 Chrome沒有。 – Rhys