一些安全相關的響應頭

目錄php

X-Frame-Options(點擊劫持)css

會話Cookie中缺乏Http Only屬性html

檢測到目標URL啓用了不安全的HTTP方法java

X-XSS-Protectionnode

X-Content-Type-Optionspython

Strict-Transport-Securityweb

X-Content-Security-Policychrome

一些大公司使用這些安全響應頭示例 json


X-Frame-Options(點擊劫持)

X-Frame-Options 響應頭是用來給瀏覽器指示是否容許一個頁面在<frame>, <iframe> 或者 <object> 中展示。網站可使用此功能,來確保本身網站的內容沒有被嵌到別人的網站中去,也從而避免了點擊劫持 (clickjacking) 的攻擊。瀏覽器

X-Frame-Options 響應頭有三個可選的值:

  • DENY:頁面不能被嵌入到任何 iframe 或 frame 中
  • SAMEORIGIN:頁面只能被本站頁面嵌入到 iframe 或 frame 中
  • ALLOW-FROM:頁面容許嵌入到 iframe 或 frame 中

在服務端設置的方式以下:

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中不含有Http Only屬性,那麼注入站點的惡意腳本可能訪問此 cookie,並竊取它的值。任何存儲在會話令牌中的信息均可能被竊取,並在稍後用於身份盜竊或用戶假裝,從而使黑客可以以該用戶身份訪問服務器。若是在Cookie中設置HttpOnly屬性爲true,兼容瀏覽器接收到HttpOnly cookie,那麼客戶端經過程序(JS腳本、Applet等)將沒法讀取到Cookie信息,這將有助於緩解跨站點腳本威脅。

//java示例
HttpServletResponse response2 = (HttpServletResponse)response;
response2.setHeader( "Set-Cookie", "name=value; HttpOnly");

檢測到目標URL啓用了不安全的HTTP方法

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的方法,而且擴展了一些其餘方法:

  • Options、Head、Trace:主要由應用程序來發現和跟蹤服務器支持和網絡行爲
  • Get:檢索文檔
  • Put和Post:將文檔提交到服務器
  • Delete:銷燬資源或集合
  • Mkcol:建立集合
  • PropFind和PropPatch:針對資源和集合檢索和設置屬性
  • Copy和Move:管理命名空間上下文中的集合和資源
  • Lock和Unlock:改寫保護

很顯然上述操做明細能夠對web服務器進行上傳、修改、刪除等操做,對服務形成威脅。雖然WebDAV有權限控制可是網上一搜仍是一大堆的攻擊方法,因此若是不須要這些方法仍是建議直接屏蔽就行了。

因此,在不須要的狀況下,建議關閉WebDAV。

X-XSS-Protection

顧名思義,這個響應頭是用來防範XSS的。如今主流瀏覽器都支持,而且默認都開啓了XSS保護,用這個header能夠關閉它。它有幾種配置:

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

瀏覽器提供的XSS保護機制並不完美,可是開啓後仍然能夠提高攻擊難度,總之沒有特別的理由,不要關閉它

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 

Strict-Transport-Security

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」加上去就行了。

X-Content-Security-Policy

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響應頭

相關文章
相關標籤/搜索