Content Security Policy
阿新 • • 發佈:2020-09-03
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 |