1. 程式人生 > >一些安全相關的HTTP header

一些安全相關的HTTP header

過期 javascrip onclick nod ase 包含 其他 圖片 url

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/

一些安全相關的HTTP header