一些安全相關的 HTTP 響應頭

jopen 9年前發布 | 11K 次閱讀 HTTP

現代瀏覽器提供了一些安全相關的響應頭,使用這些響應頭一般只需要修改服務器配置即可,不需要修改程序代碼,成本很低。本文介紹一些這樣的響應頭:

一些安全相關的 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、推ter、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現階段不支持);
  • </ul>

    如果某頁面被不被允許的頁面以<iframe>或<frame>的形式嵌入,IE會顯示類似于“此內容無法在框架中顯示”的提示信息,Chrome和Firefox都會在控制臺打印信息。由于嵌入的頁面不會加載,這就減少了點擊劫持(Clickjacking)的發生。

    3. X-XSS-Protection

    顧名思義,這個響應頭是用來防范XSS的。最早我是在介紹IE8的文章里看到這個,現在主流瀏覽器都支持,并且默認都開啟了XSS保護,用這個header可以關閉它。它有幾種配置:

    • 0:禁用XSS保護;
    • 1:啟用XSS保護;
    • 1; mode=block:啟用XSS保護,并在檢查到XSS攻擊時,停止渲染頁面(例如IE8中,檢查到攻擊時,整個頁面會被一個#替換);
    • </ul>

      瀏覽器提供的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

      推ter使用了這些:

      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

      非死book則使用了這些(配置了詳細的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://*.非死book.com http://*.非死book.com https://*.fbcdn.net http://*.fbcdn.net *.非死book.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://*.非死book.com http://*.非死book.com https://*.fbcdn.net http://*.fbcdn.net *.非死book.net *.spotilocal.com:* https://*.akamaihd.net ws://*.非死book.com:* http://*.akamaihd.net https://fb.scanandcleanlocal.com:*;
      來源: http://imququ.com/post/web-security-and-response-header.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!