目錄php
X-XSS-Protectionnode
X-Content-Type-Optionspython
X-Content-Security-Policychrome
一些大公司使用這些安全響應頭示例 json
X-Frame-Options 響應頭是用來給瀏覽器指示是否容許一個頁面在<frame>, <iframe> 或者 <object> 中展示。網站可使用此功能,來確保本身網站的內容沒有被嵌到別人的網站中去,也從而避免了點擊劫持 (clickjacking) 的攻擊。瀏覽器
X-Frame-Options 響應頭有三個可選的值:
在服務端設置的方式以下:
Java代碼:
response.addHeader("x-frame-options","SAMEORIGIN");
Nginx配置:
add_header X-Frame-Options SAMEORIGIN
Apache配置:
Header always append X-Frame-Options SAMEORIGIN
好比若是咱們使用phpstudy搭建的環境,咱們能夠 其餘選項菜單—> php擴展及設置—>Apache模塊,勾選 headers_module 模塊,而後在Apache的配置文件 httpd.conf 中的空白行加入 Header always append X-Frame-Options SAMEORIGIN 便可!
加以前
加以後
測試網站是否設置了X-Frame-Options
將以下的代碼中iframe中的連接換成待測網站的,保存爲.html文件,本地打開。若是打開的頁面中顯示了待測網站,則說明沒有設置,反之設置了。
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8" > <title>點擊劫持測試</title> </head> <body> <iframe src="http://www.xxx.com/" width="500" height="500" frameborder="10"> </iframe> </body> </html>
點擊劫持危害
以下的網頁咱們經過opacity控制iframe框的透明度
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>CLICK JACK!!</title> <style> iframe{ width:900px; height:250px; position: absolute; top:-195px; left:-740px; z-index:2; -moz-opacity:0.5; opacity: 0.5; #經過該參數控制iframe框的透明度,設置爲0時看不見 filter:alpha(opacity=0.5); } button{ position: absolute; top:10px; left:10px; z-index: 1; width: 120px; } </style> </head> <body> <iframe src="http://www.qidian.com" frameborder="0" scrolling="no"></iframe> <button>CLICK HERE!</button> </body> </html>
當咱們把opacity參數設置爲0.000001(設置爲0時,雖然也不可見,可是不能點擊到iframe框裏的內容 )時,用戶就看不到iframe框了,可是當他點擊CLICK HERE按鈕時,其實是點擊到iframe上的內容。
點擊劫持和CSRF有殊途同歸之妙,都是在用戶不知情的狀況下誘使用戶點擊完成一些動做。可是在CSRF攻擊的過程當中,若是出現用戶交互的頁面,則攻擊可能會沒法順利完成。與之相反的是,點擊劫持沒有這個顧慮,它利用的就是與用戶產生交互的頁面。
若是會話的Cookie中不含有Http Only屬性,那麼注入站點的惡意腳本可能訪問此 cookie,並竊取它的值。任何存儲在會話令牌中的信息均可能被竊取,並在稍後用於身份盜竊或用戶假裝,從而使黑客可以以該用戶身份訪問服務器。若是在Cookie中設置HttpOnly屬性爲true,兼容瀏覽器接收到HttpOnly cookie,那麼客戶端經過程序(JS腳本、Applet等)將沒法讀取到Cookie信息,這將有助於緩解跨站點腳本威脅。
//java示例 HttpServletResponse response2 = (HttpServletResponse)response; response2.setHeader( "Set-Cookie", "name=value; HttpOnly");
Web服務器(以IIS爲例)在沒有任何設置時(即默認條件下),使用OPTIONS命令,能夠返回全部可以響應的HTTP方法,如OPTIONS, TRACE, GET, HEAD, COPY, PROPFIND, SEARCH, LOCK, UNLOCK。
發送OPTIONS請求:
服務器響應可使用的HTTP方法,見Allow部分。
檢查原始測試響應的「Allow」頭,並驗證是否包含下列一個或多個不須要的選項:DELTE,SEARCE,COPY,MOVE,PROPFIND,PROPPATCH,MKCOL,LOCK,UNLOCK,PUT。
響應頭信息以下:
HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Allow: GET, HEAD, POST, PUT, DELETE, OPTIONS Content-Length: 0 Date: Mon, 25 Jul 2016 10:12:23 GMT
咱們首先了解一下這幾個方法的由來:HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法;HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
WebDAV徹底採用了HTTP1.1的方法,而且擴展了一些其餘方法:
很顯然上述操做明細能夠對web服務器進行上傳、修改、刪除等操做,對服務形成威脅。雖然WebDAV有權限控制可是網上一搜仍是一大堆的攻擊方法,因此若是不須要這些方法仍是建議直接屏蔽就行了。
因此,在不須要的狀況下,建議關閉WebDAV。
顧名思義,這個響應頭是用來防範XSS的。如今主流瀏覽器都支持,而且默認都開啓了XSS保護,用這個header能夠關閉它。它有幾種配置:
瀏覽器提供的XSS保護機制並不完美,可是開啓後仍然能夠提高攻擊難度,總之沒有特別的理由,不要關閉它
互聯網上的資源有各類類型,一般瀏覽器會根據響應頭的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
HTTP Strice 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」加上去就行了。
Content-Security-Policy,簡稱 CSP。顧名思義,這個規範與內容安全有關,主要是用來定義頁面能夠加載哪些資源,減小 XSS 的發生。
Chrome 擴展已經引入了 CSP,經過 manifest.json 中的 content_security_policy
字段來定義。一些現代瀏覽器也支持經過響應頭來定義 CSP
要使用 CSP,只須要服務端加入相似這樣的響應頭就好了:
Content-Security-Policy: default-src 'self'
default-src
是 CSP 指令,多個指令之間用英文分號分割;'self'
是指令值,多個指令值用英文空格分割。
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響應頭