關於 Web Content-Security-Policy Directive 通過 meta 元素指定的一些測試用例

JerryWang_汪子熙發表於2022-06-19

Content Security Policy 是一種使用標題或 meta 元素來限制或批准載入到指定網站上的內容的策略。 這是一個廣受支援的安全標準,所有網站運營者都應該對這些標準瞭然於心。

使用 CSP 通過說明允許或不允許的規則為 Web 網站增加了一層保護。 這些規則有助於防禦內容注入和跨站點指令碼 (XSS) 攻擊,這是 OWASP 的十大 Web 應用程式安全風險中的兩個。

當攻擊者能夠通過注入惡意程式碼來破壞未受保護的網站時,就會發生 XSS 攻擊。 當使用者嘗試與站點互動時,惡意指令碼會在使用者的瀏覽器中執行,從而使攻擊者能夠訪問受害者與站點的互動,例如登入資訊等。

CSP 將阻止大多數指令碼注入攻擊的發生,因為它可以設定為將 JavaScript 限制為僅從受信任的位置載入。

本文介紹一些基於 frame-src 這個 Directive 的各種測試用例。
作為容器,定義 iframe 的 web 應用,監聽在 3000 埠:wechat 資料夾下

嵌入了另一個網頁,監聽在 3002 埠,Jerrylist 資料夾下面:

如果 Jerrylist 資料夾下的 csp html 裡沒有宣告任何 csp 相關的 Directive(通過 meta 標籤),則 iframe 工作正常:

測試1:3000 應用(即嵌入 3002 應用的 web 應用裡)增加 frame-src

原始碼:

<html>
    <head>
        <meta http-equiv="Content-Security-Policy" content="frame-src 'self'">
    </head>
    <h1>Parent</h1>
    <iframe src="http://localhost:3002/csp"></iframe>
</html>

測試結果:

Refused to frame 'http://localhost:3002/' because it violates the following Content Security Policy directive: "frame-src 'self'".

iframe 載入失敗:

測試2

<html>
    <head>
        <meta http-equiv="Content-Security-Policy" content="frame-src 'http://localhost:3002'">
    </head>
    <h1>Parent</h1>
    <iframe src="http://localhost:3002/csp"></iframe>
</html>

錯誤訊息:

The source list for the Content Security Policy directive 'frame-src' contains an invalid source: ''http://localhost:3002''. It will be ignored.
11:25:37.549 localhost/:6 Refused to frame 'http://localhost:3002/' because it violates the following Content Security Policy directive: "frame-src 'none'".

iframe 載入失敗:

改成 * 的話,又重新工作了:

下列程式碼也工作:

<html>
    <head>
        <meta http-equiv="Content-Security-Policy" content="frame-src http://localhost:3002/csp">
    </head>
    <h1>Parent</h1>
    <iframe src="http://localhost:3002/csp"></iframe>
</html>

下列程式碼也工作:

<html>
    <head>
        <meta http-equiv="Content-Security-Policy" content="frame-src http://localhost:*/csp">
    </head>
    <h1>Parent</h1>
    <iframe src="http://localhost:3002/csp"></iframe>
</html>

下列程式碼也工作:

相關文章