iis、apache、nginx使用X-Frame-Options防止網頁被Frame的解決方法

固然也是由於被360檢測到了示"X-Frame-Options頭未設置",根據360的提示與百度了一些網上的一些資料整理了下,完美解決問題。html

首先看下360給出的方案,但麼有針對服務器的具體設置,不是每一個人對服務器都很懂啊。java

描述: 目標服務器沒有返回一個X-Frame-Options頭。nginx

X-Frame-Options HTTP響應頭是用來確認是否瀏覽器能夠在frame或iframe標籤中渲染一個頁面,網站能夠用這個頭來保證他們的內容不會被嵌入到其它網站中,以來避免點擊劫持。web

危害: 攻擊者能夠使用一個透明的、不可見的iframe,覆蓋在目標網頁上,而後誘使用戶在該網頁上進行操做,此時用戶將在不知情的狀況下點擊透明的iframe頁面。經過調整iframe頁面的位置,能夠誘使用戶剛好點擊iframe頁面的一些功能性按鈕上,致使被劫持。瀏覽器

解決方案:tomcat

修改web服務器配置,添加X-frame-options響應頭。賦值有以下三種:服務器

(1)DENY:不能被嵌入到任何iframe或frame中。
(2)SAMEORIGIN:頁面只能被本站頁面嵌入到iframe或者frame中。
(3)ALLOW-FROM uri:只能被嵌入到指定域名的框架中。app

也可在代碼中加入,在PHP中加入:框架

header('X-Frame-Options: deny');jsp

 

下面繼續來看下腳本之家從網上整理的更詳細的方法

防止網頁被Frame,方法有不少種;

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

?
1
2
3
4
5
( function () {
if (window != window.top) {
window.top.location.replace(window.location); //或者幹別的事情
}
})();

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

?
1
2
var location = document.location;
// 或者 var location = "";

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

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

?
1
< meta http-equiv = "Windows-Target" contect = "_top" >

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

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

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

絕大部分瀏覽器支持:

 

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

 

配置 IIS

IIS6中經過HTTP頭設置便可

IIS7中能夠經過web.config也能夠經過相似上面的設置

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

?
1
2
3
4
5
6
7
8
9
10
11
< system.webServer >
  ...
 
  < httpProtocol >
   < customHeaders >
    < add name = "X-Frame-Options" value = "SAMEORIGIN" />
   </ customHeaders >
  </ httpProtocol >
 
  ...
</ system.webServer >

圖文界面設置

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

?
1
Header always append X-Frame-Options SAMEORIGIN

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

?
1
add_header X-Frame-Options SAMEORIGIN;

HAProxy配置

?
1
rspadd X-Frame-Options:\ SAMEORIGIN

tomcat 與X-Frame-Options

公司項目是隻用了tomcat做爲web服務器 ,網上搜的的內容好像並不符合個人要求。
原本的想法是在每一個jsp頁面中加

?
1
2
3
<%
  response.addHeader( "x-frame-options" , "SAMEORIGIN" );
  %>

可後來想一想這種方法太蠢,萬一過不了測試還要改過來。

因而又想到了一個方法,在項目本來的過濾器中加了以下代碼

?
1
2
HttpServletResponse response = (HttpServletResponse) sResponse;
response.addHeader( "x-frame-options" , "SAMEORIGIN" );

貌似起了做用  等待客戶測試吧!

具體能夠查看:

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/X-Frame-Options?redirectlocale=en-US&redirectslug=The_X-FRAME-OPTIONS_response_header

結果

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

用虛擬主機的用戶怎麼辦呢

PHP和JSP等動態文件更方便
改一下頭信息
PHP代碼:

 header(‘X-Frame-Options:SAMEORIGIN');

JSP代碼:

response.setHeader(「X-Frame-Options」,」SAMEORIGIN」);

ASP代碼:

<%Response.AddHeader "X-Frame-Options","SAMEORIGIN"%>

ASP.NET代碼:

Response.AddHeader("X-Frame-Options", "Deny");

仍是那句話若是確認你整個網站都不能被框架,能夠直接設置web服務器,增長X-Frame-Options響應頭。IIS以下圖所示,增長http頭,參考上面的iis6與iis7中的設置方法

瀏覽器對X-Frame-Options響應頭的支持以下

 

瀏覽器 版本支持
IE 8.0+
Firefox 3.6.9+
Opera 10.50+
Safari 4.0+
Chrome 4.1.249.1024+
相關文章
相關標籤/搜索