Web安全之CSP
內容安全策略(Content-Security-Policy,簡稱CSP)
概念:
內容安全策略(CSP)是一種web應用技術用于幫助緩解大部分類型的內容注入攻擊,包括XSS攻擊和數據注入等,這些攻擊可實現數據竊取、網站破壞和作為惡意軟件分發版本等行為。該策略可讓網站管理員指定客戶端允許加載的各類可信任資源。
瀏覽器支持:
統計來源:caniuse.com/contentsecuritypolicy&Mozilla
指令參考:
Content-Security-Policy 響應頭的值可配置一個或多個,多個指令以分號;隔開。
|
指令 |
示例 |
描述 |
|
default-src |
'self' cdn.example.com |
默認配置,若其他指令沒有配置,都以此配置的規則為準 |
|
script-src |
'self' js.example.com |
定義允許加載的JavaScript來源 |
|
style-src |
'self' css.example.com |
定義允許加載的樣式表來源 |
|
img-src |
'self' img.example.com |
定義允許加載的圖片來源 |
|
connect-src |
'self' |
適用于XMLHttpRequest(AJAX),WebSocket或EventSource,當為不允許的來源,瀏覽器返回一個400的狀態碼。 |
|
font-src |
font.example.com |
定義允許加載的字體來源 |
|
object-src |
'self' |
定義允許加載的插件來源. eg,<object>,<embed>或<applet> |
|
media-src |
media.example.com |
定義允許加載的audio和video. eg,HTML5 <audio>,<video>元素 |
|
frame-src |
'self' |
定義允許加載的框架來源 |
|
sandbox |
allow-forms allow-scripts |
授權一個沙箱用來請求具有iframe sanbox等類似屬性的資源,該沙箱默認為同源策略,禁止彈出窗口,執行插件和腳本.若要允許其他,可增加配置: allow-forms,allow-same-origin, allow-scripts,allow-top-navigation |
|
report-uri |
/some-report-uri |
該配置讓瀏覽器發送一個失敗報告到指定的路徑,也可以增加-Report-only到HTTP頭,讓瀏覽器只發送報告(不做阻止動作) |
來源配置參考:
所有的指令都要在配置后面添加來源列表,多個來源列表可用空格隔開,*和none只能存在一個。
|
指令值 |
示例 |
描述 |
|
* |
img-src * |
無限制,允許所有 |
|
'none' |
object-src 'none' |
禁止加載任何路徑的資源 |
|
'self' |
script-src 'self' |
允許加載同源的資源 |
|
data: |
img-src 'self' data: |
允許通過數據模式加載資源 |
|
domain.ccc.com |
img-src img.ccc.com |
允許加載匹配域名的資源 |
|
*.ccc.com |
img-src *.ccc.com |
允許加載匹配域名的資源 |
|
https://img.ccc.com |
img-src https://img.ccc.com |
允許加載匹配https方式的域名資源 |
|
https: |
img-src https: |
允許加載所有匹配https方式的資源 |
|
'unsafe-inline' |
script-src 'unsafe-inline' |
允許使用內聯元素,類似,Style attribute,onclick,scripttag bodies |
|
'unsafe-eval' |
script-src 'unsafe-eval' |
允許不安全的動態編碼,例如eval() |
例子:
只允許加載同源的所有資源
default-src 'self';
支持*號匹配
default-src 'self' https://*.ccc.com:*;
只允許加載同源的腳本
script-src 'self';
只允許加載同源的和www.ccc.com的腳本
script-src 'self' www.ccc.com;
常見配置:
該策略允許加載同源的圖片、腳本、AJAX和CSS資源,并阻止加載其他任何資源,對于大多數網站是一個不錯的配置。
default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self';
被禁止時的報錯信息:
谷歌瀏覽器可通過谷歌開發工具查看該報錯,通常是按F12
Refused to load the script 'script-uri' because it violates the following Content Security Policy directive: "your CSP directive".
Firefox 可通過Web Developer Tools: 查看報錯
Content Security Policy: A violation occurred for a report-only CSP policy ("An attempt to execute inline scripts has been blocked"). The behavior was allowed, and a CSP report was sent.
參考:
http://content-security-policy.com/
https://developer.mozilla.org/en-US/docs/Web/Security/CSP
http://www.w3.org/TR/CSP2/
總結
- 上一篇: Crystal | 水晶方法的七大特征,
- 下一篇: 怎么创建具有真实纹理的CG场景岩石?