1. 程式人生 > >Content Security Policy 介紹

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

響應頭來支援 CSP 的,而 firefox 和 IE 則支援 X-Content-Security-Policy,Chrome25 和 Firefox23 開始支援標準的 Content-Security-Policy,見下表。

響應頭ChromeFirefoxSafariIE
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--

提醒:本文最後更新於 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