1. 程式人生 > >Content Security Policy

Content Security Policy

Content Security Policy(內容安全策略,簡稱csp)用於檢測並阻止網頁載入非法資源的安全策略,可以減輕xss攻擊帶來的危害和資料注入等攻擊。本文講述的內容主要有如何使用csp和業務接入csp流程這兩部分。 ## 簡介 csp主要工作是定義一套頁面資源載入白名單規則,瀏覽器使用csp規則去匹配所有資源,禁止載入不符合規則的資源,同時將非法資源請求進行上報。 csp作用:減輕網頁被xss攻擊後所受到的危害。實際上csp是在xss攻擊發生後才起作用,阻止請求注入的非法資源,csp並不是直接阻止xss攻擊的發生。 ## 使用方式 csp主要有兩種使用方式,分別是設定響應頭`Content-Security-Policy`和使用`meta`標籤。 ### 響應頭 在網頁html請求的響應頭中進行定義,定義方式: ``` Content-Security-Policy: 指令1 指令值1 指令值2; 指令2 指令值1; ``` 例子: ``` Content-Security-Policy: srcipt-src 'self' *.test.com'; img-src: https: data:; ``` 後面會重點講解csp中具體存在哪些指令和指令值,可以在[定義規則](#定義規則)中看到具體的介紹。 ### meta 在網頁html檔案中進行定義,定義方式: ``` ``` 例子: ``` ... ``` > 注意:由於html文件是從上至下進行解析,因此,meta儘量寫在最前面,保證能夠對所有資源請求進行約束。 ### 效果 csp規則匹配到的資源都能夠正常請求,一旦有非法資源請求,瀏覽器就會立即阻止,阻止的效果如下 ![不符合csp規則的資源](https://nowpic.gtimg.com/hy_personal_room/0/now_acticity1599050817037.png/0) ## 定義規則 csp規則內容主要由指令和指令值這兩部分構成,指令用於定義資源型別,指令值用於定義資源請求地址規則。 例子: ``` Content-Security-Policy: srcipt-src 'self' *.test.com'; ``` 上面csp規則中,`script-src`是指令碼資源載入指令,`'self'`和`*.test.com`是指令值,當載入js指令碼的時候,只有滿足指令值定義的規則才能正常載入。 ### 指令 | 指令 | 說明 | 示例 | | --- | --- | --- | | default-src | 定義所有型別資源預設載入策略,當下面這些指令未被定義的時候,瀏覽器會使用`default-src`定義的規則進行校驗 | `'self' *.test.com` | | script-src | 定義JavaScript資源載入策略 | `'self' js.test.com` | | style-src | 定義樣式檔案的載入策略 | `'self' css.test.com` | | img-src | 定義圖片檔案的載入策略 | `'self' img.test.com` | | font-src | 定義字型檔案的載入策略 | `'self' font.test.com` | | connect-src | 定義XHR、WebSocket等請求的載入策略,當請求不符合定義的規則時,瀏覽器會模擬一個響應狀態碼為400的響應 | `'self'` | | object-src |