Web安全之CSP
內(nèi)容安全策略(Content-Security-Policy,簡(jiǎn)稱CSP)
概念:
內(nèi)容安全策略(CSP)是一種web應(yīng)用技術(shù)用于幫助緩解大部分類(lèi)型的內(nèi)容注入攻擊,包括XSS攻擊和數(shù)據(jù)注入等,這些攻擊可實(shí)現(xiàn)數(shù)據(jù)竊取、網(wǎng)站破壞和作為惡意軟件分發(fā)版本等行為。該策略可讓網(wǎng)站管理員指定客戶端允許加載的各類(lèi)可信任資源。
瀏覽器支持:
統(tǒng)計(jì)來(lái)源:caniuse.com/contentsecuritypolicy&Mozilla
指令參考:
Content-Security-Policy 響應(yīng)頭的值可配置一個(gè)或多個(gè),多個(gè)指令以分號(hào);隔開(kāi)。
|
指令 |
示例 |
描述 |
|
default-src |
'self' cdn.example.com |
默認(rèn)配置,若其他指令沒(méi)有配置,都以此配置的規(guī)則為準(zhǔn) |
|
script-src |
'self' js.example.com |
定義允許加載的JavaScript來(lái)源 |
|
style-src |
'self' css.example.com |
定義允許加載的樣式表來(lái)源 |
|
img-src |
'self' img.example.com |
定義允許加載的圖片來(lái)源 |
|
connect-src |
'self' |
適用于XMLHttpRequest(AJAX),WebSocket或EventSource,當(dāng)為不允許的來(lái)源,瀏覽器返回一個(gè)400的狀態(tài)碼。 |
|
font-src |
font.example.com |
定義允許加載的字體來(lái)源 |
|
object-src |
'self' |
定義允許加載的插件來(lái)源. eg,<object>,<embed>或<applet> |
|
media-src |
media.example.com |
定義允許加載的audio和video. eg,HTML5 <audio>,<video>元素 |
|
frame-src |
'self' |
定義允許加載的框架來(lái)源 |
|
sandbox |
allow-forms allow-scripts |
授權(quán)一個(gè)沙箱用來(lái)請(qǐng)求具有iframe sanbox等類(lèi)似屬性的資源,該沙箱默認(rèn)為同源策略,禁止彈出窗口,執(zhí)行插件和腳本.若要允許其他,可增加配置: allow-forms,allow-same-origin, allow-scripts,allow-top-navigation |
|
report-uri |
/some-report-uri |
該配置讓瀏覽器發(fā)送一個(gè)失敗報(bào)告到指定的路徑,也可以增加-Report-only到HTTP頭,讓瀏覽器只發(fā)送報(bào)告(不做阻止動(dòng)作) |
來(lái)源配置參考:
所有的指令都要在配置后面添加來(lái)源列表,多個(gè)來(lái)源列表可用空格隔開(kāi),*和none只能存在一個(gè)。
|
指令值 |
示例 |
描述 |
|
* |
img-src * |
無(wú)限制,允許所有 |
|
'none' |
object-src 'none' |
禁止加載任何路徑的資源 |
|
'self' |
script-src 'self' |
允許加載同源的資源 |
|
data: |
img-src 'self' data: |
允許通過(guò)數(shù)據(jù)模式加載資源 |
|
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' |
允許使用內(nèi)聯(lián)元素,類(lèi)似,Style attribute,onclick,scripttag bodies |
|
'unsafe-eval' |
script-src 'unsafe-eval' |
允許不安全的動(dòng)態(tài)編碼,例如eval() |
例子:
只允許加載同源的所有資源
default-src 'self';
支持*號(hào)匹配
default-src 'self' https://*.ccc.com:*;
只允許加載同源的腳本
script-src 'self';
只允許加載同源的和www.ccc.com的腳本
script-src 'self' www.ccc.com;
常見(jiàn)配置:
該策略允許加載同源的圖片、腳本、AJAX和CSS資源,并阻止加載其他任何資源,對(duì)于大多數(shù)網(wǎng)站是一個(gè)不錯(cuò)的配置。
default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self';
被禁止時(shí)的報(bào)錯(cuò)信息:
谷歌瀏覽器可通過(guò)谷歌開(kāi)發(fā)工具查看該報(bào)錯(cuò),通常是按F12
Refused to load the script 'script-uri' because it violates the following Content Security Policy directive: "your CSP directive".
Firefox 可通過(guò)Web Developer Tools: 查看報(bào)錯(cuò)
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/
總結(jié)
- 上一篇: Crystal | 水晶方法的七大特征,
- 下一篇: 高德地图公布“奇境”引擎,推出“奇境MA