內容安全策略(CSP) 防禦 XSS 攻擊的好助手

2021-08-02 11:39:16 字數 1480 閱讀 2737

閱讀全文

其核心思想十分簡單:**通過傳送乙個 csp 頭部,來告訴瀏覽器什麼是被授權執行的與什麼是需要被禁止的。

這裡有乙個 php 的例子:

php

header

("content-security-policy: "

);?>

一些指令

你可以定義一些全域性規則或者定義一些涉及某一類資源的規則:

default

-src 

'self'

;

#self

=同埠,同網域名稱,同協議

=>

允許基礎引數是default-src:如果沒有為某一類資源設定指令規則,那麼瀏覽器就會使用這個預設引數值。

script

-src 

'self'

www.

google

-analytics

.com 

;

#來自這些網域名稱的

js 檔案

=>

允許如果沒有指明協議(scheme)或埠,它就會強制選擇與當前頁面相同的協議或埠。這樣做防止了混合內容(lctt 譯註:混合內容指 https 頁面中也有非 https 資源,可參見:  )。如果頁面是 那麼你將無法載入 因為它已經被禁止了(協議不匹配)。然而,有乙個例外就是協議的提公升是被允許的。如果 嘗試載入 接著協議或埠允許被更改以便協議的提公升。

style

-src 

'self'

data

:;

#data

-uri

嵌入css 

=>

允許在 csp 1 規範下,你也可以設定如下規則:

csp 2 規範包含了如下規則:

為了更好的向後相容一些廢棄的屬性,你可以簡單的複製當前指令的內容同時為那個廢棄的指令建立乙個相同的副本。例如,你可以複製child-src的內容同時在frame-src中新增乙份相同的副本。

csp 2 允許你新增路徑到白名單中(csp 1 只允許網域名稱被新增到白名單中)。因此,相較於將整個 www.foo.com 域新增到白名單,你可以通過新增 www.foo.com/some/folder 這樣的路徑到白名單中來作更多的限制。這個需要瀏覽器中 csp 2 的支援,但它很明顯更安全。

乙個例子

我為 web 2015 巴黎大會上我的演講 「csp in action」製作了乙個簡單的例子。

在沒有 csp 的情況下,頁面展示如下圖所示:

不是十分優美。要是我們啟用了如下的 csp 指令又會怎樣呢?

閱讀全文

XSS 再談CSP內容安全策略

之前每次都是想的很淺,或者只是個理論派,事實證明就是得動手實踐 參考 官方文件 通過設定屬性來告訴瀏覽器允許載入的資源資料 可通過response響應頭來設定,也可以直接通過meta標籤來設定 content security policy default src self script src s...

CSP 內容安全策略

服務端可通過設定響應頭csp來實現 1.限制資源獲取 2.報告資源獲取越權 資源1 空格 關鍵字1 資源2 關鍵字2 如 content security policy script src self form action self report uri report ps 表轉義,避免node....

內容安全策略 CSP

內容安全策略 csp 是乙個額外的安全層,用於檢測並削弱某些特定型別的攻擊,包括跨站指令碼 xss 和資料注入攻擊等。摘自mdn 具體內容請參考mdn 對於react和vue,xss攻擊已經在框架裡進行了防範,但是使用 dangerouslysetinnerhtml react 和 v html v...