點擊劫持漏洞解決( Clickjacking: X-Frame-Options header missing)

 點擊劫持漏洞

  X-Frame-Options HTTP 響應頭, 能夠指示瀏覽器是否應該加載一個 iframe 中的頁面。 網站能夠經過設置 X-Frame-Options 阻止站點內的頁面被其餘頁面嵌入從而防止點擊劫持css

方法一:常見的好比使用js,判斷頂層窗口跳轉:html

js 代碼:
(function () {
    if (window != window.top) {
        window.top.location.replace(window.location); //或者幹別的事情
    }
})();

通常這樣夠用了,可是有一次發現失效了,看了一下人家網站就是頂層窗口中的代碼,發現這段代碼:python

js 代碼:
var location = document.location;
// 或者 var location = "";

輕輕鬆鬆被破解了,悲劇。nginx

注:此方式破解對IE6,IE7,IE9+、Chrome、firefox無效web

 

方法二:meta 標籤:基本沒什麼效果,因此也放棄了:瀏覽器

html 代碼:
<meta http-equiv="Windows-Target" contect="_top">

 

方法三:使用HTTP 響應頭信息中的 X-Frame-Options屬性app

使用 X-Frame-Options 有三個可選的值:網站

  • DENY:瀏覽器拒絕當前頁面加載任何Frame頁面
  • SAMEORIGIN:frame頁面的地址只能爲同源域名下的頁面
  • ALLOW-FROM:origin爲容許frame加載的頁面地址

換一句話說,若是設置爲 DENY,不光在別人的網站 frame 嵌入時會沒法加載,在同域名頁面中一樣會沒法加載。另外一方面,若是設置爲 SAMEORIGIN,那麼頁面就能夠在同域名頁面的 frame 中嵌套ui

絕大部分瀏覽器支持:spa

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support 4.1.249.1042 3.6.9 (1.9.2.9) 8.0 10.5 4.0

 

配置 Apache

配置 Apache 在全部頁面上發送 X-Frame-Options 響應頭,須要把下面這行添加到 'site' 的配置中:

Header always append X-Frame-Options SAMEORIGIN

 

配置 nginx

配置 nginx 發送 X-Frame-Options 響應頭,把下面這行添加到 'http', 'server' 或者 'location' 的配置中:

add_header X-Frame-Options SAMEORIGIN;

 

配置 IIS

配置 IIS 發送 X-Frame-Options 響應頭,添加下面的配置到 Web.config 文件中:

<system.webServer>
  ...

  <httpProtocol>
    <customHeaders>
      <add name="X-Frame-Options" value="SAMEORIGIN" />
    </customHeaders>
  </httpProtocol>

  ...
</system.webServer>

 

結果

在 Firefox 嘗試加載 frame 的內容時,若是 X-Frame-Options 響應頭設置爲禁止訪問了,那麼 Firefox 會用 about:blank 展示到 frame 中。也許從某種方面來說的話,展現爲錯誤消息會更好一點。

相關文章
相關標籤/搜索