如何使用 HTTP header 欄位來提高 Web 安全性

SSDLC實作議題之一。在 Web 伺服器做出響應時,為了提高安全性,在 HTTP 響應頭中可以使用的各種響應頭欄位。好文章留存。

原主文網址:https://kknews.cc/zh-tw/tech/p5kr2jj.html 如何使用 HTTP 響應頭欄位來提高 Web 安全性?

X-Frame-Options

該響應頭中用於控制是否在瀏覽器中顯示 frame 或 iframe 中指定的頁面,主要用來防止 Clickjacking (點擊劫持)攻擊。

X-Frame-Options: SAMEORIGIN
  • DENY 禁止顯示 frame 內的頁面(即使是同一網站內的頁面)

  • SAMEORIGIN

  • 允許在 frame 內顯示來自同一網站的頁面,禁止顯示來自其他網站的頁面

  • ALLOW-FROM origin_uri 允許在 frame 內顯示來自指定 uri 的頁面(當允許顯示來自於指定網站的頁面時使用)

X-Content-Type-Options

如果從 script 或 stylesheet 讀入的文件的 MIME 類型與指定 MIME 類型不匹配,不允許讀取該文件。用於防止 XSS 等跨站腳本攻擊。

X-Frame-Options: nosniff

X-XSS-Protection

用於啟用瀏覽器的 XSS 過濾功能,以防止 XSS 跨站腳本攻擊。

X-XSS-Protection: 1; mode=block
  • 0 禁用 XSS 過濾功能

  • 1 啟用 XSS 過濾功能

Content-Security-Policy

用於控制當外部資源不可信賴時不被讀取。用於防止 XSS 跨站腳本攻擊或數據注入攻擊(但是,如果設定不當,則網站中的部分腳本代碼有可能失效)。 (本人加註:為白名單。我可以取用那裡的資料。當被植入代碼後的防禦。)

之前的欄位名為 X-Content-Security-Policy

Content-Security-Policy: default-src 'self'
  • default-src 'self':允許讀取來自於同源(域名+主機+埠號)的所有內容

  • default-src 'self'

  • *.example.com:允許讀取來自於指定域名及其所有子域名的所有內容

X-Permitted-Cross-Domain-Policies

用於指定當不能將"crossdomain.xml"文件(當需要從別的域名中的某個文件中讀取 Flash 內容時用於進行必要設置的策略文件)放置在網站根目錄等場合時採取的替代策略。

X-Permitted-Cross-Domain-Policies: master-only
  • master-only 只允許使用主策略文件(/crossdomain.xml)

Strict-Transport-Security

用於通知瀏覽器只能使用 HTTPS 協議訪問網站。用於將 HTTP 網站重定向到 HTTPS 網站。

Strict-Transport-Security: max-age=31536; includeSubDomains
  • max-age 用於修改 STS 的默認有效時間。

  • includeSubDomains 用於指定所有子域名同樣使用該策略。

Access-Control-Allow-Origin等CORS相關欄位

當使用 XMLHttpRequest 從其他域名中獲取資源進行跨域通信時使用。 (本人加註:現代瀏灠器皆有支援同源政策模式,即自己的後端資源只能給自己使用。若要分享給別人使用就要設定 Access-Control-Allow-Origin。一般建議不要開啟)

Access-Control-Allow-Origin: http://www.example.com Access-Control-Allow-Methods: POST, GET, OPTIONS Access-Control-Allow-Headers: X-TRICORDER Access-Control-Max-Age: 1728

上述代碼用於設定與"http://www.example.com"進行跨域通信處理,允許使用 POST, GET, OPTIONS 方法,在發送的請求頭中添加 X-TRICORDER 欄位,通信超時時間為1,728,00秒。

比較特別的是 Cookie 的安全設定,由於 Cookie 也是 HTTP headers 的一部份,因此本文也將其列出:

Set-Cookie: HttpOnly Set-Cookie: Secure

上述資安相關的 headers 想解決哪些問題?

目前這些資安相關的 HTTP headers 想解決的問題主要可分為以下五大類:

  • 防禦 XSS (Cross Site Scripting):

    • Content-Security-Policy

    • Set-Cookie: HttpOnly

    • X-XSS-Protection

    • X-Download-Options

  • 防禦 Clickjacking:

    • X-Frame-Options

  • 強化 HTTPS 機制:

    • Set-Cookie: Secure

    • Strict-Transport-Security

  • 避免瀏覽器誤判文件形態:

    • X-Content-Type-Options

  • 保護網站資源別被任意存取:

    • Access-Control-Allow-Origin(此 header 若設定錯誤會適得其反!)

    • X-Permitted-Cross-Domain-Policies

其中 XSSClickjacking 是目前常見的攻擊手法,尤其 XSS 目前仍高居 OWASP Top 10 2013 的第三名,其嚴重性可見一斑。而在我們執行過的許多滲透測試案之中,被我們找出 XSS 弱點的網站高達九成!實在是不能輕忽這些問題。若能降低這些手法攻擊成功的機率,企業的利益就能有更多的安全保障,客戶對企業的信賴亦會更加穩固。

(EOF)

Last updated