安全相關的 HTTP 響應頭總結
現代瀏覽器提供了一些安全相關的響應頭,使用這些響應頭一般只需要修改伺服器配置即可,不需要修改程式程式碼,成本很低。本文介紹一些這樣的響應頭:
1. Strict-Transport-Security
HTTP Strict Transport Security,簡稱為HSTS。它允許一個HTTPS網站,要求瀏覽器總是通過HTTPS來訪問它。現階段,除了Chrome瀏覽器,Firefox4+,以及Firefox的NoScript擴充套件都支援這個響應頭。
我們知道HTTPS相對於HTTP有更好的安全性,而很多HTTPS網站,也可以通過HTTP來訪問。開發人員的失誤或者使用者主動輸入地址,都有可能導致使用者以HTTP訪問網站,降低了安全性。一般,我們會通過Web Server傳送301/302重定向來解決這個問題。現在有了HSTS,可以讓瀏覽器幫你做這個跳轉,省一次HTTP請求。另外,瀏覽器本地替換可以保證只會傳送HTTPS請求,避免被劫持。
要使用HSTS,只需要在你的HTTPS網站響應頭中,加入下面這行:
strict-transport-security: max-age=16070400; includeSubDomains
includeSubDomains是可選的,用來指定是否作用於子域名。支援HSTS的瀏覽器遇到這個響應頭,會把當前網站加入HSTS列表,然後在max-age指定的秒數內,當前網站所有請求都會被重定向為https。即使使用者主動輸入http://或者不輸入協議部分,都將重定向到https://地址。
Chrome內建了一個HSTS列表,預設包含Google、Paypal、Twitter、Linode等等服務。我們也可以在Chrome輸入chrome://net-internals/#hsts,進入HSTS管理介面。在這個頁面,你可以增加/刪除/查詢HSTS記錄。例如,你想一直以https訪問某網址,通過“add Domain”加上去就好了。檢視Chrome內建的全部HSTS列表,或者想把自己的網站加入這個列表,請點這裡。
2. X-Frame-Options
X-Frame-Options,已經轉正為Frame-Options,但現階段使用最好還是帶上X-。Chrome4+、Firefox3.6.9+、IE8+均支援,詳細的瀏覽器支援情況看這裡。使用方式如下:
x-frame-options: SAMEORIGIN
這個響應頭支援三種配置:
- DENY:不允許被任何頁面嵌入;
- SAMEORIGIN:不允許被本域以外的頁面嵌入;
- ALLOW-FROM uri:不允許被指定的域名以外的頁面嵌入(Chrome現階段不支援);
如果某頁面被不被允許的頁面以<iframe>或<frame>的形式嵌入,IE會顯示類似於“此內容無法在框架中顯示”的提示資訊,Chrome和Firefox都會在控制檯列印資訊。由於嵌入的頁面不會載入,這就減少了點選劫持(Clickjacking)的發生。
3. X-XSS-Protection
顧名思義,這個響應頭是用來防範XSS的。最早我是在介紹IE8的文章裡看到這個,現在主流瀏覽器都支援,並且預設都開啟了XSS保護,用這個header可以關閉它。它有幾種配置:
- 0:禁用XSS保護;
- 1:啟用XSS保護;
- 1; mode=block:啟用XSS保護,並在檢查到XSS攻擊時,停止渲染頁面(例如IE8中,檢查到攻擊時,整個頁面會被一個#替換);
瀏覽器提供的XSS保護機制並不完美,但是開啟後仍然可以提升攻擊難度,總之沒有特別的理由,不要關閉它。
4. X-Content-Type-Options
網際網路上的資源有各種型別,通常瀏覽器會根據響應頭的Content-Type欄位來分辨它們的型別。例如:”text/html”代表html文件,”image/png”是PNG圖片,”text/css”是CSS樣式文件。然而,有些資源的Content-Type是錯的或者未定義。這時,某些瀏覽器會啟用MIME-sniffing來猜測該資源的型別,解析內容並執行。
例如,我們即使給一個html文件指定Content-Type為”text/plain”,在IE8-中這個文件依然會被當做html來解析。利用瀏覽器的這個特性,攻擊者甚至可以讓原本應該解析為圖片的請求被解析為JavaScript。通過下面這個響應頭可以禁用瀏覽器的型別猜測行為:
X-Content-Type-Options: nosniff
這個響應頭的值只能是nosniff,可用於IE8+和Chrome。另外,它還被Chrome用於擴充套件下載,見這裡。
5. X-Content-Security-Policy
這個響應頭主要是用來定義頁面可以載入哪些資源,減少XSS的發生。之前單獨介紹過,請點選繼續瀏覽:Content Security Policy介紹。
別人怎麼用
最後,我們來看看幾個實際案例:
Google+,使用了這幾個本文提到的響應頭:
x-content-type-options: nosniff x-frame-options: SAMEORIGIN x-xss-protection: 1; mode=block
Twitter使用了這些:
strict-transport-security: max-age=631138519 x-frame-options: SAMEORIGIN x-xss-protection: 1; mode=block
PayPal的:
X-Frame-Options: SAMEORIGIN Strict-Transport-Security: max-age=14400
Facebook則使用了這些(配置了詳細的CSP,關閉了XSS保護):
strict-transport-security: max-age=60 x-content-type-options: nosniff x-frame-options: DENY x-xss-protection: 0 content-security-policy: default-src *;script-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.google-analytics.com *.virtualearth.net *.google.com 127.0.0.1:* *.spotilocal.com:* chrome-extension://lifbcibllhkdhoafpjfnlhfpfgnpldfl 'unsafe-inline' 'unsafe-eval' https://*.akamaihd.net http://*.akamaihd.net;style-src * 'unsafe-inline';connect-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.spotilocal.com:* https://*.akamaihd.net ws://*.facebook.com:* http://*.akamaihd.net https://fb.scanandcleanlocal.com:*;
相關文章
- 一些安全相關的HTTP響應頭HTTP
- WEB安全防護相關響應頭(上)Web
- WEB安全防護相關響應頭(下)Web
- 響應者鏈及相關機制總結
- 關於常用的http請求頭以及響應頭詳解HTTP
- http請求頭與響應頭的應用HTTP
- HTTP請求頭與響應頭HTTP
- [php]http響應頭解析PHPHTTP
- 網路、HTTP相關學習總結HTTP
- HTTP與快取相關的頭部HTTP快取
- HTTP請求頭和響應頭詳解HTTP
- HTTP相關的應用程式HTTP
- HTTP協議---HTTP請求中的常用請求欄位和HTTP的響應狀態碼及響應頭HTTP協議
- 一些安全相關的HTTP headerHTTPHeader
- Ajax 相關總結
- WPF 相關總結
- HTTP標頭學習總結歸納HTTP
- 網頁快取相關的HTTP頭部資訊詳解網頁快取HTTP
- golang 設定 http response 響應頭的內容與坑GolangHTTP
- HTTP 響應HTTP
- java Set相關總結Java
- java List相關總結Java
- java Map相關總結Java
- vue原理相關總結Vue
- JavaScript作用域相關的總結JavaScript
- JavaScript跨域相關的總結JavaScript跨域
- SAP 電商雲 Automation Engine 關於 HTTP 請求響應頭的一些配置HTTP
- Http請求get與post請求方式的各種相關面試總結HTTP面試
- 相機成像相關知識總結
- Oracle ebs應用相關服務和程式總結Oracle
- mysql相關問題總結MySql
- Springmvc相關配置總結SpringMVC
- 畫素相關概念總結
- TCP相關面試題總結TCP面試題
- MySql相關語句總結MySql
- 二極體相關總結
- HTTP 請求響應頭部欄位裡 ETAG 的用法舉例HTTP
- 【前端 · 面試 】HTTP 總結(十)—— HTTP 快取應用前端面試HTTP快取