如何使用 HTTP header 欄位來提高 Web 安全性
SSDLC實作議題之一。在 Web 伺服器做出響應時,為了提高安全性,在 HTTP 響應頭中可以使用的各種響應頭欄位。好文章留存。
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秒。
Set-Cookie
比較特別的是 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
其中 XSS 與 Clickjacking 是目前常見的攻擊手法,尤其 XSS 目前仍高居 OWASP Top 10 2013 的第三名,其嚴重性可見一斑。而在我們執行過的許多滲透測試案之中,被我們找出 XSS 弱點的網站高達九成!實在是不能輕忽這些問題。若能降低這些手法攻擊成功的機率,企業的利益就能有更多的安全保障,客戶對企業的信賴亦會更加穩固。
(EOF)
Last updated