iis、apache、nginx使用X-Frame-Options防止網(wǎng)頁被Frame的解決方法
當(dāng)然也是因為被360檢測到了示"X-Frame-Options頭未設(shè)置",根據(jù)360的提示與百度了一些網(wǎng)上的一些資料整理了下,完美解決問題。
首先看下360給出的方案,但么有針對服務(wù)器的具體設(shè)置,不是每個人對服務(wù)器都很懂啊。
描述: 目標(biāo)服務(wù)器沒有返回一個X-Frame-Options頭。
X-Frame-Options HTTP響應(yīng)頭是用來確認是否瀏覽器可以在frame或iframe標(biāo)簽中渲染一個頁面,網(wǎng)站可以用這個頭來保證他們的內(nèi)容不會被嵌入到其它網(wǎng)站中。
解決方案:
修改web服務(wù)器配置,添加X-frame-options響應(yīng)頭。賦值有如下三種:
(1)DENY:不能被嵌入到任何iframe或frame中。
(2)SAMEORIGIN:頁面只能被本站頁面嵌入到iframe或者frame中。
(3)ALLOW-FROM uri:只能被嵌入到指定域名的框架中。
也可在代碼中加入,在PHP中加入:
header('X-Frame-Options: deny');
下面繼續(xù)來看下腳本之家從網(wǎng)上整理的更詳細的方法
防止網(wǎng)頁被Frame,方法有很多種;
方法一: 常見的比如使用js,判斷頂層窗口跳轉(zhuǎn):
(function () { if (window != window.top) { window.top.location.replace(window.location); //或者干別的事情 } })();
一般這樣夠用了,但是有一次發(fā)現(xiàn)失效了,看了一下人家網(wǎng)站就是頂層窗口中的代碼,發(fā)現(xiàn)這段代碼:
var location = document.location; // 或者 var location = "";
輕輕松松被破解了,悲劇。
方法二: meta 標(biāo)簽:基本沒什么效果,所以也放棄了:
<meta http-equiv="Windows-Target" contect="_top">
方法三:使用HTTP 響應(yīng)頭信息中的 X-Frame-Options屬性
使用 X-Frame-Options 有三個可選的值:
DENY
:瀏覽器拒絕當(dāng)前頁面加載任何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頭設(shè)置即可
IIS7中可以通過web.config也可以通過類似上面的設(shè)置
配置 IIS 發(fā)送 X-Frame-Options 響應(yīng)頭,添加下面的配置到 Web.config 文件中:
<system.webServer> ... <httpProtocol> <customHeaders> <add name="X-Frame-Options" value="SAMEORIGIN" /> </customHeaders> </httpProtocol> ... </system.webServer>
圖文界面設(shè)置
配置 Apache
配置 Apache 在所有頁面上發(fā)送 X-Frame-Options 響應(yīng)頭,需要把下面這行添加到 ‘site’ 的配置中:
Header always append X-Frame-Options SAMEORIGIN
配置 nginx
配置 nginx 發(fā)送 X-Frame-Options 響應(yīng)頭,把下面這行添加到 ‘http’, ‘server’ 或者 ‘location’ 的配置中:
add_header X-Frame-Options SAMEORIGIN;
HAProxy配置
rspadd X-Frame-Options:\ SAMEORIGIN
tomcat 與X-Frame-Options
公司項目是只用了tomcat作為web服務(wù)器 ,網(wǎng)上搜的的內(nèi)容好像并不符合我的要求。
本來的想法是在每個jsp頁面中加
<% response.addHeader("x-frame-options","SAMEORIGIN"); %>
可后來想想這種方法太蠢,萬一過不了測試還要改過來。
于是又想到了一個方法,在項目原本的過濾器中加了如下代碼
HttpServletResponse response = (HttpServletResponse) sResponse; response.addHeader("x-frame-options","SAMEORIGIN");
貌似起了作用 等待客戶測試吧!
具體可以查看:
結(jié)果
在 Firefox 嘗試加載 frame 的內(nèi)容時,如果 X-Frame-Options 響應(yīng)頭設(shè)置為禁止訪問了,那么 Firefox 會用 about:blank 展現(xiàn)到 frame 中。也許從某種方面來講的話,展示為錯誤消息會更好一點。
用虛擬主機的用戶怎么辦呢
PHP和JSP等動態(tài)文件更方便
改一下頭信息
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");
還是那句話如果確認你整個網(wǎng)站都不能被框架,可以直接設(shè)置web服務(wù)器,增加X-Frame-Options響應(yīng)頭。IIS如下圖所示,增加http頭,參考上面的iis6與iis7中的設(shè)置方法
瀏覽器對X-Frame-Options響應(yīng)頭的支持如下
瀏覽器 | 版本支持 |
---|---|
IE | 8.0+ |
Firefox | 3.6.9+ |
Opera | 10.50+ |
Safari | 4.0+ |
Chrome | 4.1.249.1024+ |
相關(guān)文章
Mac OSX下使用MAMP安裝配置PHP開發(fā)環(huán)境
本部分描述如何在 Mac 上安裝 MAMP。將通過一個操作安裝 Apache Web 服務(wù)器、MySQL 和phpMyAdmin,需要的朋友可以參考下2017-09-09Centos服務(wù)器部署前后端項目的實戰(zhàn)教程
這篇文章主要介紹了Centos服務(wù)器部署前后端項目的實戰(zhàn)教程,本文通過實例圖文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2024-02-02