CSP 內容安全策略

CSP(Content-Security-Policy)內容安全策略,官方解釋:CSP是一個額外的徹底層,用於檢測並小若某些特定類型的攻擊,包括跨站腳本攻擊XSS和數據注入攻擊等。javascript

配置方法:css

1. 後端配置網絡服務器返回Content-Security-Policy頭部html

2. 前端經過<meta>標籤進行配置前端

<meta http-equiv="Content-Security-Policy" content="default-src 'self';">複製代碼

CSP使用目的java

XSS攻擊方面:CSP的主要用途是減小和上報XSS攻擊,經過指定 瀏覽器承認的可執行腳本的有效來源(將僅執行從白名單域獲取到的腳本文件,忽略全部其餘腳本,包括內聯腳本和HTML的事件處理屬性),使服務器管理者有能力減小或者消除XSS攻擊所依賴的載體。後端

數據注入攻擊方面:可指定全部內容必須經過HTTPS加載。瀏覽器

策略制定安全

配置相關策略,能夠控制瀏覽器爲該頁面獲取的資源。bash

Content-Security-Policy: default-src | script-src | style-src | img-src ....服務器

  • script-src:外部腳本
  • style-src:樣式表
  • img-src:圖像
  • media-src:媒體文件(音頻和視頻)
  • font-src:字體文件
  • object-src:插件(好比 Flash)
  • child-src:框架
  • frame-ancestors:嵌入的外部資源(好比<frame>、<iframe>、<embed>和<applet>)
  • connect-src:HTTP 鏈接(經過 XHR、WebSockets、EventSource等)
  • worker-srcworker腳本
  • manifest-src:manifest 文件

經常使用安全策略方案:

1. 內容同源

Content-Security-Policy: default-src 'self'複製代碼

2. 信任指定域資源

Content-Security-Policy: default-src 'self' *.example.com複製代碼

3. 信任全部圖片源,限制富媒體資源

Content-Security-Policy: default-src 'selc'; img-src *; media-src media1.com media2.com; srcipt-src *.example.com複製代碼

默認的,各種資源容許從文檔所在源獲取,但如下內容除外:

  • 圖片資源不受限制
  • 富媒體資源僅容許從media1.com, media2.com獲取,且這類站點的不包括子域
  • 可運行腳本僅容許*.example.com
  • 若此處不設置script-src,僅容許javascript從原始服務器獲取

4. 經過HTTPS加載

Content-Security-Policy: default-src https://some.trusted.com/複製代碼

測試策略

Content-Security-Policy-Report-Only(報告模式),CSP策略不是強制性的,但任何違規行爲都會上報到指定URI。

Content-Security-Policy和Content-Security-Policy-Report-Only,也能夠同時使用,Content-Security-Policy帶有策略強制性,而Content-Security-Policy-Report-Only中的策略只產生報告不具備強制性。

發送違規報告

啓用發送違規報告,須要指定report-uri策略指令,並提供至少一個URI地址:

Content-Security-Policy: default-src 'self'; report-uri https://report.catch.com/collector.cpi複製代碼

而後在服務器設置接收。

案例使用說明

假設一個 https://example.com/index.html 頁面,CSP策略禁止任何資源的加載,除了cdn.example.com的資源樣式表。

Content-Security-Policy: default-src 'none'; style-src cdn.example.com; report-uri /_/report-collect複製代碼

index.html代碼以下:

<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" href="css/style.css">
    </head>
    <body>...</body>
</html>複製代碼

因爲CSP的設置,頁面總link標籤的css資源沒法被正常加載,且還會發送一個違規報告到https://example.com/_/report-collect:

{
    "report-collect": {
        "document-uri":  https://example.com/index.html,   // 發生違規行爲的文檔的URI
        "referrer": "",  // 違規發生處的文檔引用地址
        "blocked-uri": "https://example.com/css/style.css", // 被CSP阻止的資源
        "violated-directive": "style-src cdn.example.com",  // 違反的策略名稱
        "original-policy": "default-src 'none'; style-src cdn.example.com;report-uri /_/report-collect", // 原始策略
    }
}複製代碼
相關文章
相關標籤/搜索