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>
下列程式碼也工作: