1.Strict Transport Security HTTP Strict Transport Security,簡稱為HSTS。 作用:允許一個HTTPS網站,要求瀏覽器總是通過HTTPS訪問它。 includeSubDomains,可選,用於指定是否作用於子功能變數名稱 支持HSTS的瀏覽器遇到這個 ...
1.Strict-Transport-Security
HTTP Strict-Transport-Security,簡稱為HSTS。
作用:允許一個HTTPS網站,要求瀏覽器總是通過HTTPS訪問它。
strict-transport-security: max-age=16070400; includeSubDomains
- includeSubDomains,可選,用於指定是否作用於子功能變數名稱
- 支持HSTS的瀏覽器遇到這個響應頭,會把當前網站加入HSTS列表,然後在max-age指定的秒數內,當前網站所有請求都會被瀏覽器重定向為https。
- Chrome內置了一個HSTS列表,預設包含Google、Paypal、Twitter、Linode等服務。輸入chrome://net-internals/#hsts,進入HSTS管理界面,可以增加/刪除/查詢HSTS記錄。
2.X-Frame-Options:是否允許一個頁面可在<frame>、<iframe>、<object>中展現的標記。
作用:減少/避免點擊劫持 (clickjacking) 的攻擊。
使用方式如下:
x-frame-options: SAMEORIGIN
響應頭支持三種配置:
- DENY:表示該頁面不允許在 frame 中展示,即便是在相同功能變數名稱的頁面中嵌套也不允許。
- SAMEORIGIN:表示該頁面可以在相同功能變數名稱頁面的 frame 中展示。
- ALLOW-FROM uri:表示該頁面可以在指定來源的 frame 中展示。
3.X-XSS-Protection
作用:防範XSS攻擊。
PS:這個是舊屬性,基本上可以被CSP取代,但是仍可以為還沒有支持CSP的瀏覽器提供一層保護。
主流瀏覽器預設都開啟了XSS保護。
使用方式如下:
X-XSS-Protection: 1; mode=block; report=/_/http-sec-report
支持配置:
- 0:禁止XSS保護
- 1:啟用XSS保護:啟用XSS保護,瀏覽器檢測到XSS攻擊會自動過濾非安全部分內容
- 1;mode=block:啟用XSS保護,併在檢測到XSS攻擊的時候停止渲染頁面
- 1;report=
:啟用XSS保護,檢測到XSS攻擊的時候,瀏覽器會自動過濾非安全內容,同時上報到指定URI。
4.X-Content-Type-Options
作用:禁用瀏覽器的Content-Type猜測行為。
背景:
瀏覽器通常會根據響應頭Content-Type欄位來分辨資源類型。有些資源的Content-Type是錯的或者未定義。這時,瀏覽器會啟用MIME-sniffing來猜測該資源的類型,解析內容並執行。
利用這個特性,攻擊者可以讓原本應該解析為圖片的請求被解析為JavaScript。
使用方法:
X-Content-Type-Options: nosniff
5.X-Content-Security-Policy(舊版)/Content-Security-Policy
作用:用於定義頁面可以載入哪些資源,減少和上報XSS的攻擊,防止數據包嗅探攻擊。
響應頭:
- Content-Security-Policy
- X-Content-Security-Policy
- X-Webkit-CSP
使用方法:
Content-Security-Policy: default-src 'self'
- 一個策略由一系列策略指令組成,每個策略指令都描述了一個針對某個特定類型資源以及生效範圍的策略。
- default-src是CSP指令,多個指令之間使用英文分號分割;
- self是指令值,多個指令值用英文空格分割。
- 支持的CSP指令
元素也可以用於配置CSP:
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
指令 | 指令值示例 | 說明 |
---|---|---|
default-src | 'self' cnd.a.com | 定義針對所有類型資源的預設載入策略,某類型資源如果沒有單獨定義策略,就使用預設的。 |
script-src | 'self' js.a.com | 定義針對JavaScript的載入策略 |
style-src | 'self' css.a.com | 定義針對樣式的載入策略 |
img-src | 'self' img.a.com | 定義針對圖片的載入策略 |
connect-src | 'self' | 針對Ajax、WebSocket等請求的載入策略。不允許的情況下,瀏覽器會模擬一個狀態為400的響應。 |
font-src | font.a.com | 針對WebFont的載入策略 |
object-src | 'self' | 針對<object>、<embed>、<applet>等標簽引入的flash等插件的載入策略 |
media-src | media.a.com | 針對<audio>、<video>等標簽引入的HTML多媒體的載入策略。 |
frame-src | 'self' | 針對frame的載入策略 |
sanbox | allow-forms | 對請求的資源啟用sandbox(類似於iframe的sandbox屬性) |
report-uri | /report-uri | 告訴瀏覽器如果請求不被策略允許,往哪個地址提交日誌信息。如果想讓瀏覽器只彙報日誌,不阻止任何內容,可以改用 Content-Security-Policy-Report-Only 頭。 |
指令值可以由下麵內容組成:
指令值 | 指令值示例 | 說明 |
---|---|---|
img-src | 允許任何內容 | |
'none' | img-src 'none' | 不允許任何內容 |
'self' | img-src 'self' | 允許來自相同源的內容(相同的協議、功能變數名稱和埠)。 |
data: | img-src data: | 允許data:協議(如base64編碼的圖片) |
www.a.com | img-src img.a.com | 允許載入指定功能變數名稱的資源 |
.a.com | img-src .a.com | 允許載入a.com任何子域的資源 |
https://img.com | img-src https://img.com | 允許載入img.com的https資源 |
https: | img-src https: | 允許載入https資源 |
'unsafe-inline' | script-src 'unsafe-inline' | 允許載入inline資源(例如常見的style屬性,onclick, inline js, inline css)。 |
'unsafe-eval' | script-src 'unsafe-eval' | 允許載入動態js代碼,例如eval()。 |
違例報告
- document-uri:發生違規的文檔的URI。
- referrer:違規發生處的文檔引用地址
- blocked-uri:被CSP阻止的資源URI。如果被阻止的URI來自不同的源而非文檔URI,則被阻止的資源URI會被刪減,僅保留協議、主機和埠號。
- violated-directive:違反的策略名稱
- original-policy:在Content-Security-Policy HTTP header中指明的原始策略。
6.Set-Cookie
- HttpOnly:防止使用javascript(如document.cookie)去存取cookie
- Secure:強制cookie只能在HTTPS環境下傳遞
7.Referrer-Policy
作用:增加隱私保護。
可配置值:
- no-referrer: 不允許被記錄
- origin:只記錄origin,即功能變數名稱
- strict-origin:只有在HTTPS->HTTPS之間才會被記錄下來
- strict-origin-when-cross-origin:同源請求會發送完整的URL;HTTPS->HTTPS,發送源;降級下不發送此首部。
- no-referrer-when-downgrade(default):同strict-origin
- origin-when-cross-origin:對於同源的請求,會發送完整的URL作為引用地址,但是對於非同源請求僅發送文件的源。
- same-origin:對於同源請求會發送完整URL,非同源請求則不發送referer
- unsafe-url:無論是同源請求還是非同源請求,都發送完整的URL(移除參數信息之後)作為引用地址。(可能會泄漏敏感信息)
8.Public-Key-Pins(HPKP)
作用:防止中間人攻擊。是HTTPS網站防止攻擊者利用CA錯誤簽發的證書進行中間人攻擊的一種安全機制,用於預防CA遭入侵或者其他會造成CA簽發未授權證書的情況。
伺服器通過Public-Key-Pins(或Public-Key-Pins-Report-Onky用於監測)header向瀏覽器傳遞HTTP公鑰固定信息。
基本格式:
Public-Key-Pins: pin-sha256="base64=="; max-age=expireTime [; includeSubdomains][; report-uri="reportURI"]
欄位含義:
- pin-sha256:即證書指紋,允許出現多次,實際上應用最少指定兩個;
- max-age:過期時間
- includeSubdomains:是否包含子域
- report-uri:驗證失敗時上報的地址
安全掃描網站:https://securityheaders.com/