本文簡單介紹與安全相同的 HTTP 響應頭部,內容整理自《OWASP Secure Headers Project》。php
HTTP Strict Transport Security(HSTS) 是一種網絡安全策略機制,用於防範降級攻擊(Downgrade Attack)和 Cookie 劫持(Cookie Hijacking)。它容許服務器告訴瀏覽器(或其餘代理)只能使用 HTTPS 訪問服務,禁止使用 HTTP。實現了 HSTS 策略的服務器經過 HTTPS 連接的 Strict-Transport-Security
頭部告訴客戶端其策略,HTTP 中的 HSTS 頭部會被忽略。跨域
參數:數組
參數 | 說明 |
---|---|
max-age=SECONDS |
指定的時間(秒)範圍內瀏覽器老是使用 HTTPS 來訪問 |
includeSubDomains |
可選參數,是否同時應用於當前域名的全部子域名 |
示例:瀏覽器
Strict-Transport-Security: max-age=31536000; includeSubDomains
HTTP Public Key Pinning (HPKP)是一種防止 HTTPS 網站被攻擊者使用錯誤發佈或其餘欺詐性證書冒充安全證書的安全機制。例如,攻擊者可能會欺騙證書頒發機構,而後爲錯誤的爲其頒發證書。安全
HTTPS 服務器會經過頭部提供一個公鑰哈希列表,在後續的請求中,客戶端指望服務端在證書鏈中使用其中一個或多個公鑰哈希。想要安全的部署 HPKP,要求具備成熟的部署和管理機制,不然主機可能會由於固定到一組無效的公鑰哈希而使得服務不可用。一旦成功部署,可以大大減少中間人攻擊和其餘虛假認證問題。服務器
參數:網絡
參數 | 說明 |
---|---|
pin-sha256="<sha256>" |
Base64 編碼的公鑰信息指紋,能夠指定多個不一樣的公鑰 |
max-age=SECONDS |
指定的時間(秒)範圍內老是使用其中一個固定的 key |
includeSubDomains |
可選參數,是否同時應用於全部子域名 |
report-uri="<URL>" |
可選參數,pin 校驗失敗後的上報地址 |
示例:app
Public-Key-Pins: pin-sha256="d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM="; pin-sha256="E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g="; report-uri="http://example.com/pkp-report"; max-age=10000; includeSubDomains
X-Frame-Options
響應頭部用於保護網絡應用遭受點擊劫持(Clickjacking)攻擊。它用來控制網站是否顯示其它域的 <iframe>
內容。字體
參數:網站
參數 | 說明 |
---|---|
deny |
不顯示 <frame> 內容 |
sameorigin |
只顯示來自同域的 <frame> 內容 |
allow-from:<DOMAIN> |
只顯示指定域名的 <frame> 內容 |
示例:
X-Frame-Options: deny
X-XSS-Protection
用來開啓瀏覽器自帶的 XSS 防禦。
參數:
參數 | 說明 |
---|---|
0 |
不開啓 |
1 |
開啓,當瀏覽器檢測到 XSS 攻擊時,會清除不安全的內容 |
1;mode=block |
開啓,當瀏覽器檢測到 XSS 攻擊時,不會清除內容,而是會阻止頁面加載 |
1;report=<REPORT-URI> |
(Chrome Only)開啓,當瀏覽器檢測到 XSS 攻擊時,將清除不安全內容並使用 CSP report-uri 指令發送違規報告 |
示例:
X-XSS-Protection: 1; mode=block
設置該頭部能夠防止瀏覽器把響應解析爲指定 Content-Type
之外的類型。例如,一個 HTML 文檔的 Content-Type
爲 text/plain
,可是有些瀏覽器仍然會把文檔當作 HTML 來解析。
參數:
參數 | 說明 |
---|---|
nosniff |
阻止瀏覽器自動推測類型 |
示例:
X-Content-Type-Options: nosniff
Content-Security-Policy
(CSP)能夠用來定義詳細的安全策略。它能夠大範圍地控制瀏覽器行爲,例如默認不容許內嵌腳本,除非顯式聲明容許。
CSP 的設置較爲複雜,由指令和參數組成,指令之間使用 ;
分割,參數之間使用空格分割。指令的值即爲參數。
參數:
指令 | 說明 |
---|---|
base-uri |
定義相對 URI 的基礎 URI |
default-src |
定義全部資源加載的默認策略,若是對應類型的資源加載策略沒有定義,則會使用該策略 |
script-src |
定義能夠執行的 Script 來源 |
object-src |
定義 <object> 、<embed> 、<applet> 等能夠加載的插件來源 |
style-src |
定義容許加載的樣式來源 |
img-src |
定義容許加載的圖片來源 |
media-src |
定義容許加載的視頻和音頻來源 |
frame-src |
定義容許嵌入的 <frame> 來源(已棄用,請使用 child-src 代替) |
child-src |
定義容許嵌入的 <frame> 來源 |
font-src |
定義容許加載的字體來源 |
connect-src |
定義容許訪問的接口域名 |
manifest-src |
定義容許加載的資源清單來源 |
form-action |
定義容許在 <form> 中使用的 action 域名 |
sandbox |
定義 HTML 沙盒策略 |
script-nonce |
要求 script 必須帶上隨機串(SRI 相關) |
referrer |
定義客戶端必須發送 Referer 頭部信息 |
report-uri |
定義違規報告的發送地址 |
參數 | 說明 |
---|---|
'none' |
不容許任何內容 |
'self' |
容許同源內容 |
data: |
容許 data: 協議 |
www.example.com |
容許指定域名內容 |
.example.com |
容許子域名內容 |
https://example.com |
容許指定域名且協議匹配的內容 |
https: |
容許加載 HTTPS 資源 |
'unsafe-inline' |
容許行內資源,如行內 JS 和 CSS 、style 屬性、onclick 屬性等 |
'unsafe-eval' |
容許 js 動態代碼,如 eval |
示例:
Content-Security-Policy: default-src *; script-src 'self' 'unsafe-inline' 'unsafe-eval'; report-uri https://example.com/report
Referfer-Policy 響應頭部控制瀏覽器應該在 Referrer
請求頭部中發送什麼信息。
參數:
參數 | 說明 |
---|---|
no-referrer |
不發送 Referrer 頭部 |
no-referrer-when-downgrade |
默認值,HTTPS 轉 HTTP 時不發送 Referrer 頭部 |
origin |
只發送文檔源域名 |
origin-when-cross-origin |
同域時發送完整的 URL,跨域時只發送源域名 |
same-origin |
同域時才發送,跨域時不發送 |
strict-origin |
只有在 HTTPS 轉 HTTPS 時才發送源域名,其餘狀況不發送 |
strict-origin-when-cross-origin |
同域時發送完整 URL,HTTPS 轉 HTTPS 時發送源域名,HTTPS 轉 HTTP 時不發送 |
unsafe-url |
發起同域或跨域請求時發送完整 URL(不含參數) |
示例:
Referrer-Policy: no-referrer