一些安全相關的HTTP header

AmyZYX發表於2018-12-17

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中指明的原始策略。
  • 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/

相關文章