Content Security Policy 介紹
提醒:本文最後更新於 688 天前,文中所描述的資訊可能已發生改變,請謹慎使用。
本文要介紹的是 W3C 的 Content Security Policy,簡稱 CSP。顧名思義,這個規範與內容安全有關,主要是用來定義頁面可以載入哪些資源,減少 XSS 的發生。
Chrome 擴充套件已經引入了 CSP,通過 manifest.json 中的 content_security_policy
欄位來定義。一些現代瀏覽器也支援通過響應頭來定義 CSP。下面我們主要介紹如何通過響應頭來使用 CSP,Chrome 擴充套件中 CSP 的使用可以參考 Chrome 官方文件。
瀏覽器相容性
早期的 Chrome 是通過 X-WebKit-CSP
X-Content-Security-Policy
,Chrome25 和 Firefox23 開始支援標準的 Content-Security-Policy
,見下表。
響應頭 | Chrome | Firefox | Safari | IE |
---|---|---|---|---|
Content-Security-Policy | 25+ | 23+ | - | - |
X-Content-Security-Policy | - | 4.0+ | - | 10.0(有限的) |
X-Webkit-CSP | 14+ | - | 6+ | - |
完整的瀏覽器 CSP 支援情況請移步 CanIUse。
如何使用
要使用 CSP,只需要服務端輸出類似這樣的響應頭就行了:
Content-Security-Policy: default-src 'self'
default-src
是 CSP 指令,多個指令之間用英文分號分割;'self'
是指令值,多個指令值用英文空格分割。目前,有這些 CSP 指令:
指令 | 指令值示例 | 說明 |
---|---|---|
default-src | 'self' cnd.a.com | 定義針對所有型別(js、image、css、web font,ajax 請求,iframe,多媒體等)資源的預設載入策略,某型別資源如果沒有單獨定義策略,就使用預設的。 |
script-src | 'self' js.a.com | 定義針對 JavaScript 的載入策略。 |
style-src | 'self' css.a.com | 定義針對樣式的載入策略。 |
img-src | 'self' img.a.com | 定義針對圖片的載入策略。 |
connect-src | 'self' | 針對 Ajax、WebSocket 等請求的載入策略。不允許的情況下,瀏覽器會模擬一個狀態為 400 的響應。 |
font-src | font.a.com | 針對 WebFont 的載入策略。 |
object-src | 'self' | 針對 <object>、<embed> 或 <applet> 等標籤引入的 flash 等外掛的載入策略。 |
media-src | media.a.com | 針對 <audio> 或 <video> 等標籤引入的 HTML 多媒體的載入策略。 |
frame-src | 'self' | 針對 frame 的載入策略。 |
sandbox | allow-forms | 對請求的資源啟用 sandbox(類似於 iframe 的 sandbox 屬性)。 |
report-uri | /report-uri | 告訴瀏覽器如果請求的資源不被策略允許時,往哪個地址提交日誌資訊。
特別的:如果想讓瀏覽器只彙報日誌,不阻止任何內容,可以改用 Content-Security-Policy-Report-Only 頭。 |
指令值可以由下面這些內容組成:
指令值 | 指令示例 | 說明 |
---|---|---|
img-src | 允許任何內容。 | |
'none' | img-src 'none' | 不允許任何內容。 |
'self' | img-src 'self' | 允許來自相同來源的內容(相同的協議、域名和埠)。 |
data: | img-src data: | 允許 data: 協議(如 base64 編碼的圖片)。 |
www.a.com | img-src img.a.com | 允許載入指定域名的資源。 |
.a.com | img-src .a.com | 允許載入 a.com 任何子域的資源。 |
https: | img-src https: | 允許載入 https 資源。 |
'unsafe-inline' | script-src 'unsafe-inline' | 允許載入 inline 資源(例如常見的 style 屬性,onclick,inline js 和 inline css 等等)。 |
'unsafe-eval' | script-src 'unsafe-eval' | 允許載入動態 js 程式碼,例如 eval()。 |
從上面的介紹可以看到,CSP 協議可以控制的內容非常多。而且如果不特別指定 'unsafe-inline'
時,頁面上所有 inline 樣式和指令碼都不會執行;不特別指定 'unsafe-eval'
,頁面上不允許使用 new Function,setTimeout,eval 等方式執行動態程式碼。在限制了頁面資源來源之後,被 XSS 的風險確實小不少。
當然,僅僅依靠 CSP 來防範 XSS 是遠遠不夠的,不支援全部瀏覽器是它的硬傷。不過,鑑於低廉的開發成本,加上也沒什麼壞處。如果擔心影響面太大,也可以像下面這樣,僅收集不匹配規則的日誌,先觀察下:
Content-Security-Policy-Report-Only: script-src 'self'; report-uri http://test/
這樣,如果頁面上有 inline JS,依然會執行,只是瀏覽器會向指定地址傳送一個 POST 請求,包含這樣的資訊:
{"csp-report":{"document-uri":"http://test/test.php","referrer":"","violated-directive":"script-src 'self'","original-policy":"script-src 'self'; report-uri http://test/","blocked-uri":""}}
CSP 先介紹到這裡。現代瀏覽器支援不少與安全有關的響應頭,以後接著再介紹。已經寫完了,請點這裡繼續瀏覽。
--EOF--
發表於 2013-07-22 18:40:39 ,並被新增「 XSS 、 Header 、 CSP 」標籤 ,最後修改於 2017-02-21 17:20:32 。檢視本文 Markdown 版本 »
提醒:本文最後更新於 688 天前,文中所描述的資訊可能已發生改變,請謹慎使用。
相關推薦
Content Security Policy 介紹
提醒:本文最後更新於 688 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 本文要介紹的是 W3C 的 Content Security Policy,簡稱 CSP。顧名思義,這個規範與內容安全有關,主要是用來定義頁面可以載入哪些資源,減少 XSS 的發生。 Chrome 擴充套件已經
Content Security Policy Level 2 介紹
提醒:本文最後更新於 815 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 兩年前,我寫過一篇介紹 Content Security Policy(CSP)的文章(詳情),CSP 是一個用來定義頁面可以載入或執行哪些資源的協議,目前已經發展到了 Level 2(協議地址)。我在本站之前的文
Content Security Policy (CSP) 介紹
當我不經意間在 Twitter 頁面 view source 後,發現了驚喜。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title
Web 安全之內容安全策略(Content-Security-Policy,CSP)詳解
pid eba elf safe 數據 信息 java php 我們 1.CSP 簡介 內容安全策略(Content Security Policy,簡稱CSP)是一種以可信白名單作機制,來限制網站是否可以包含某些來源內容,緩解廣泛的內容註入漏洞,比如 XSS。 簡單來說,
內容安全策略Content Security Policy( CSP )
內容安全策略 (CSP) 是一個額外的安全層,用於檢測並削弱某些特定型別的攻擊,包括跨站指令碼 (XSS) 和資料注入攻擊等。無論是資料盜取、網站內容汙染還是散發惡意軟體,這些攻擊都是主要的手段。 CSP 被設計成完全向後相容(除CSP2 在向後相容有明確提
DVWA 黑客攻防實戰(十五) 繞過內容安全策略 Content Security Policy (CSP) Bypass
看到標題,是否有點疑惑 CPS 是什麼東東。簡單介紹一下就是瀏覽器的安全策略,如果 標籤,或者是伺服器中返回 HTTP 頭中有 Content-Security-Policy 標籤 ,瀏覽器會根據標籤裡面的內容,判斷哪些資源可以載入或執行。阮一峰老師也有關於CSP 的文章,大家可以看看 看回 DVWA
http強制升級為https http標頭檔案 Content Security Policy: 升級不安全的請求
http強制升級為https<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" /> Content Security Policy: 升級不安全的
CSP(Content Security Policy),在一定程度上能預防XSS攻擊
在介紹CSP之前,我們先先來了解一下什麼是XSS攻擊? XSS攻擊:一種常見的跨指令碼web攻擊方式,它通過向瀏覽器注入一段可執行的惡意指令碼程式碼,並且被瀏覽器成功的執行來達到攻擊的目的。一次XSS攻擊可以獲取到使用者的聯絡方式,向用戶傳送詐騙資訊,甚至可以
Content Security Policy
Content Security Policy(內容安全策略,簡稱csp)用於檢測並阻止網頁載入非法資源的安全策略,可以減輕xss攻擊帶來的危害和資料注入等攻擊。本文講述的內容主要有如何使用csp和業務接入csp流程這兩部分。 ## 簡介 csp主要工作是定義一套頁面資源載入白名單規則,瀏覽器使用csp規則
Security 簡單介紹
本篇是Spring安全的初級指南,主要介紹Spring安全框架的設計和基本模組。此處僅僅涉及應用安全方面非常基礎的知識,但是通過本篇可以掃清使用Spring安全框架是遇到的一些困惑。為了達到此目的,我們會關注安全是如何通過過濾器和註解而被應用到Web應用中的。當你想在更高的層次理解Spring安
spring security簡單介紹
這裡是修真院後端小課堂,每篇分享文從 【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴充套件思考】【更多討論】【參考文獻】 八個方面深度解析後端知識/技能,本篇分享的是: 【spring security簡單介紹】 大家好,我是IT修真院北京分院
JAVA.SECURITY.POLICY 配置說明
眾所周知,Java語言具有完善的安全框架,從程式語言,編譯器、解釋程式到Java虛擬機器,都 能確保Java系統不被無效的程式碼或敵對的編譯器暗中破壞,基本上,它們保證了Java程式碼按預定的規則運作。但是,當我們需要逾越這些限制時,例如,讀 寫檔案,監聽和讀寫Socket,退出Java系統等,就必
UnknownServiceException: CLEARTEXT communication to XXX not permitted by network security policy
使用高版本的OkHttp在進行http請求時會報出這個錯誤,https則不會。 解決辦法 1.開啟AndroidManifest.xml 檔案,在 application 元素中新增: android:usesCleartextTraffic=”true” 2.在res下新建一個xm
Mongo進階--Security安全介紹
Security對任何程式而言都非常重要,mongodb中提供了多種機制來保證資料安全性,叢集中的members只有提供正確的認證資訊才能彼此建立連結,客戶端訪問資料時,不僅認證資訊正確(Authentication),還需要具有一定的訪問許可權(privilege)才能
Ask HN: How do you manage a security policy for your small team?
My company is a small team operating in the digital health space that's recently grown to 12 in the past year. Although we don't deal with a ton of PHI, s
教程篇(6.0) 01. FortiGate及其Security Fabric介紹 ❀ 飛塔 (Fortinet) 網路安全專家 NSE4
在本課中,你將瞭解FortiGate管理基礎知識和FortiGate中可以擴充套件功能的元件。這一課還包括如何以及在哪裡將FortiGate安裝到你現有的網路體系結構和Security Fabric中。 在本次課程中,你將探討以下主題: 高階功能 策略設定
CJIS Security Policy on AWS
This Quick Start deploys a standardized environment that helps organizations with workloads that fall in scope for the Criminal Justice Informatio
Referrer Policy 介紹「續」
提醒:本文最後更新於 1339 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 通過 CSP 頭部設定「Origin When Cross-origin」策略時,指令值應該用 origin-when-cross-origin,這跟 <meta> 用的 origin-when-cr
Referrer Policy 介紹
提醒:本文最後更新於 1190 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 我們知道,在頁面引入圖片、JS 等資源,或者從一個頁面跳到另一個頁面,都會產生新的 HTTP 請求,瀏覽器一般都會給這些請求頭加上表示來源的 Referrer 欄位。Referrer 在分析使用者來源時很有用,有
android9.0適配HTTPS:not permitted by network security policy'
tex manifest traffic comm clas 運行 class android and app功能接口正常,其他手機運行OK,但是在Android9.0的手機上報錯 CLEARTEXT communication to 192.168.1.xx not p