HTTP 安全頭部速記

本文簡單介紹與安全相同的 HTTP 響應頭部,內容整理自《OWASP Secure Headers Project》php

HTTP Strict Transport Security

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

Public Key Pinning Extension for HTTP

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

X-Frame-Options 響應頭部用於保護網絡應用遭受點擊劫持(Clickjacking)攻擊。它用來控制網站是否顯示其它域的 <iframe> 內容。字體

參數:網站

參數 說明
deny 不顯示 <frame> 內容
sameorigin 只顯示來自同域的 <frame> 內容
allow-from:<DOMAIN> 只顯示指定域名的 <frame> 內容

示例:

X-Frame-Options: deny

X-XSS-Protection

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

X-Content-Type-Options

設置該頭部能夠防止瀏覽器把響應解析爲指定 Content-Type 之外的類型。例如,一個 HTML 文檔的 Content-Typetext/plain,可是有些瀏覽器仍然會把文檔當作 HTML 來解析。

參數:

參數 說明
nosniff 阻止瀏覽器自動推測類型

示例:

X-Content-Type-Options: nosniff

Content-Security-Policy

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

Referrer-Policy

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
相關文章
相關標籤/搜索