本文介紹在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=31536000; includeSubDomains
- max-age 用於修改STS的默認有效時間。
- includeSubDomains 用於指定所有子域名同樣使用該策略。
Access-Control-Allow-Origin等CORS相關字段
當使用XMLHttpRequest從其他域名中獲取資源進行跨域通信時使用。
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: 1728000
上述代碼用於設定與“http://www.example.com”進行跨域通信處理,允許使用POST, GET, OPTIONS方法,在發送的請求頭中添加X-TRICORDER字段,通信超時時間為1,728,00秒。
X-Download-Options
用於放置直接打開用戶下載文件。
X-Download-Options: noopen
- noopen 用於指定IE 8以上版本的用戶不打開文件而直接保存文件。在下載對話框中不顯示“打開”選項。
Set-Cookie
用於設置Cookie。
Set-Cookie: name=value; secure; HttpOnly
- secure 只在進行HTTP通信時發送Cookie。
- HttpOnly 指定不能從JavaScript腳本代碼訪問Cookie值。
- 雖然path屬性用於指定Cooki發送路徑,但是不能被作為一種安全手段。
- domain屬性具有后方一致特性,出於安全考慮最好不要使用該屬性,除非明確指定向多個域發送Cookie。
Cache-Control
指定瀏覽器的緩存方式,通過逗號分隔。
Cache-Control: no-cache, no-store, must-revalidate
- no-cache 指定服務器端不緩存數據。
- no-store 指定不能在本地緩存中保存數據。
- must-revalidate 指定服務器端可以緩存數據,但是必須對數據進行確認。
pragma
用於與HTTP/1.0進行向后兼容的響應頭字段,原本只被使用在客戶端請求頭中。與“Cache-Control: no-cache”結合使用。
pragma: no-cache
- no-cache 客戶端要求所有中間服務器不能緩存數據。
expires
指定數據的有效時間。不希望緩存數據時可以將該字段值與Date字段值指定為相同值或者將該字段值指定為“-1”。
expires: -1
content-type
指定實體內對象的媒體類型(MediaType)。在charset關鍵字中指定文字編碼格式。
content-type: text/html;charset=utf-8
HTTP響應頭的設定方法
在Apache服務器中指定響應頭時,需要在httpd.conf文件中將下述模塊設定為有效狀態。
- LoadModule headers_module modules/mod_headers.so
然后使用下述方法設定HTTP響應頭。
Header set HeaderFieldName "value" //例如 Header set X-XSS-Protection "1; mode=block”
