1. 程式人生 > 其它 >CSP 內容安全策略筆記

CSP 內容安全策略筆記

CSP(Content-Security-Policy)內容安全策略,主要用於預防常見的Web攻擊,如XSS攻擊、資料注入攻擊等。服務端通過設定響應報文的Content-Security-Policy欄位,控制瀏覽器可以為該頁面獲取哪些資源,下面是一些常用的設定示例

default-src

default-src 用於控制網頁中資源的安全性

// 允許使用內聯 JavaScript 和 CSS
Content-Security-Policy: default-src 'unsafe-inline'

// 允許使用類似 eval 的 text-to-JavaScript 機制
Content-Security-Policy: default-src 'unsafe-eval'

// 必須與當前來源(而不是其子域)匹配
Content-Security-Policy: default-src 'self'

// 不執行任何匹配,所有內聯、外聯的JS和CSS等資源都不允許引入
Content-Security-Policy: default-src 'none'

上面的關鍵字需要使用單引號,多個屬性值用空格分割。除此之外也可以通過特定的條件限制訪問源,比如只允許https、或者只允許某些特定網址

// 只信任 https://cdn.example.net 和 https://api.example.net 的資源
Content-Security-Policy: default-src https://cdn.example.net https://api.example.net;

// 只允許https資源
Content-Security-Policy: default-src https

上面列出的關鍵字和策略適用於所有的資源安全控制,比如script-srcstyle-src

img-src

script-src

script-src 用於控制網頁中JS的安全性

// nonce-<base64-value>: 允許某個特定的內聯指令碼
Content-Security-Policy: default-src 'self'; script-src nonce-'asdf'
<script nonce="asdf">
  console.log('inline script')
</script>

img-src

// 允許 example.com 下的所有圖片資源
Content-Security-Policy: img-src https://*.example.com

除了上面列出的這些策略,還有很多可以控制的指令,具體可已參考MDN文件,平時用的較多的是script-srcdefault-src

參考文章

谷歌開發文件-內容安全政策
MDN-內容安全政策

部落格: https://blog.86886.wang
GitHub: https://github.com/wmui