8

是否Content-Security-Policy忽略X-Frame-Options,由服務器返回,或者是X-Frame-Options還是主要的?Content-Security-Policy如何與X-Frame-Options一起使用?

假設我有:

將瀏覽器加載該框架?

現在還不清楚。
一方面,http://a.com明確否定取景。
另一方面,http://b.com明確允許構建http://a.com

回答

1

答案是在實踐中通過測試發現的。
我創建了兩個網站並複製了描述的情況。

看起來好像X-Frame-Options是主要的。
如果目標服務器拒絕組幀,則客戶端網站無法在iframe中顯示此頁,無論設置了哪個值Content-Security-Policy

但是,我沒有在文檔中找到任何確認。

測試在鉻54和IE 11.

13

frame-src CSP directive(由child-src棄用,替換)確定哪些源可以在頁面上的框架來使用。

另一方面,X-Frame-Options響應標頭確定哪些其他頁面可以在iframe中使用該頁面。

在你的情況下,http://a.comX-Frame-Options: DENY表示沒有其他頁面可以在一個框架中使用它。 http://b.com在CSP中具有哪些內容並不重要 - 在一個幀中沒有頁面可以使用http://a.com


其中X-Frame-Options與CSP相交的地方是經由frame-ancestors directive。從CSP specificiation(重點煤礦):

這個指令是類似的X-Frame-Options頭幾個 用戶代理已經實現。 'none'源表達式爲 大致相當於該報頭的DENY,'self'SAMEORIGIN, 等。主要區別在於許多用戶代理執行 SAMEORIGIN,因此它只能匹配頂層 文檔的位置。這個指令檢查每個祖先。如果任何 祖先不匹配,則加載被取消。[RFC7034]

frame-ancestors指令廢止X-Frame-Options標頭。如果某個資源同時擁有兩個策略,則應該執行frame-ancestors策略,並且應該忽略X-Frame-Options策略。

older question表示這在Firefox當時並沒有工作,但希望事情現在已經改變。

+0

「frame-src CSP指令(已棄用並由child-src取代)」 - 此語句的來源是什麼? – sapy

+0

https://www.w3.org/TR/CSP2/#directive-frame-src - 「frame-src指令已被棄用,希望管理嵌套瀏覽上下文的作者應該使用child-src指令。」看起來它計劃在CSP3中不贊成 - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-src#Specifications和https:// www.w3.org/TR/CSP/#directive-child-src –

+0

是的,Firefox沒有尊重這一點,上次我在幾個月前檢查過,但現在它按預期工作。 –

1

這不是普遍的事實; Chrome瀏覽器會忽略X-Frame-Options,而Safari 9及以下瀏覽器忽略CSP框架祖先。 Safari 10尊重CSP框架祖先指令,但優先考慮X框架選項(如果指定)。

相關問題