iis、apache、nginx使用X-Frame-Options防止网页被Frame的解决方法

 更新时间:2017年03月24日 22:24:59   投稿:mdxy-dxy  
X-Frame-Options HTTP响应头是用来确认是否浏览器可以在frame或iframe标签中渲染一个页面,网站可以用这个头来保证他们的内容不会被嵌入到其它网站中,以来避免点击劫持

当然也是因为被360检测到了示"X-Frame-Options头未设置",根据360的提示与百度了一些网上的一些资料整理了下,完美解决问题。

首先看下360给出的方案,但么有针对服务器的具体设置,不是每个人对服务器都很懂啊。

描述: 目标服务器没有返回一个X-Frame-Options头。

X-Frame-Options HTTP响应头是用来确认是否浏览器可以在frame或iframe标签中渲染一个页面,网站可以用这个头来保证他们的内容不会被嵌入到其它网站中,以来避免点击劫持。

危害: 攻击者可以使用一个透明的、不可见的iframe,覆盖在目标网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击iframe页面的一些功能性按钮上,导致被劫持。

解决方案:

修改web服务器配置,添加X-frame-options响应头。赋值有如下三种:

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

也可在代码中加入,在PHP中加入:

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

下面继续来看下脚本之家从网上整理的更详细的方法

防止网页被Frame,方法有很多种;

方法一: 常见的比如使用js,判断顶层窗口跳转:

(function () {
if (window != window.top) {
window.top.location.replace(window.location); //或者干别的事情
}
})();

一般这样够用了,但是有一次发现失效了,看了一下人家网站就是顶层窗口中的代码,发现这段代码:

var location = document.location;
// 或者 var location = "";

轻轻松松被破解了,悲剧。

方法二: meta 标签:基本没什么效果,所以也放弃了:

<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 文件中:

<system.webServer>
 ...

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

 ...
</system.webServer>

图文界面设置

配置 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;

HAProxy配置

rspadd X-Frame-Options:\ SAMEORIGIN

tomcat 与X-Frame-Options

公司项目是只用了tomcat作为web服务器 ,网上搜的的内容好像并不符合我的要求。
本来的想法是在每个jsp页面中加

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

可后来想想这种方法太蠢,万一过不了测试还要改过来。

于是又想到了一个方法,在项目原本的过滤器中加了如下代码

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+

相关文章

  • 宝塔面板中mongodb的配置教程分享

    宝塔面板中mongodb的配置教程分享

    MongoDB是一个基于分布式文件存储的数据库,由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案,下面我们来讲讲如何在宝塔面板中配置mongodb吧
    2023-08-08
  • 教你如何快速使用miniserve搭建文件服务

    教你如何快速使用miniserve搭建文件服务

    当我们想自己搭建一个 HTTP 文件服务向其他人分享文件,我们可以通过 miniserve 一键生成简约、美观的文件服务器,这篇文章主要介绍了如何使用miniserve搭建文件服务,感兴趣的朋友跟随小编一起看看吧
    2023-04-04
  • dubbo的配置文件详解(推荐)

    dubbo的配置文件详解(推荐)

    这篇文章主要介绍了dubbo 配置文件详解(推荐),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Windows搭建NTP时间同步服务器教程详解

    Windows搭建NTP时间同步服务器教程详解

    网络时间协议,英文名称:Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,这篇文章主要介绍了Windows搭建NTP时间同步服务器的图文教程,需要的可以收藏一下
    2023-08-08
  • SSH证书登录方法详细教程

    SSH证书登录方法详细教程

    SSH是服务器登录工具,密码登录和密钥登录,都有各自的缺点。SSH还有第三种登录方法,那就是证书登录。很多情况下,它是更合理、更安全的登录方法,本文介绍证书登录的方法,需要的朋友可以参考下
    2022-12-12
  • 在VPS上用3Proxy架设http代理和socks代理(Ubuntu环境)

    在VPS上用3Proxy架设http代理和socks代理(Ubuntu环境)

    前几天记录了在廉价的xen vps主机上通过squid架设http代理的情况,试用效果非常不错。但是现在需要增加socks代理,这方便squid就无能为力了,于是改用传说中的轻量级的NB代理软件3Proxy。
    2010-07-07
  • Visual Studio Code(vscode) git的使用教程

    Visual Studio Code(vscode) git的使用教程

    这篇文章主要介绍了详解Visual Studio Code(vscode) git的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • CentOS Rsync服务端与Windows cwRsync客户端实现数据同步配置方法

    CentOS Rsync服务端与Windows cwRsync客户端实现数据同步配置方法

    这篇文章主要介绍了CentOS Rsync服务端与Windows cwRsync客户端实现数据同步配置方法,需要的朋友可以参考下
    2015-07-07
  • ansible管理工具的环境及部署安装

    ansible管理工具的环境及部署安装

    这篇文章主要为大家介绍了管理工具ansible的环境安装及部署过程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-03-03
  • 关于Centos安装fabric遇到的问题和解决方法

    关于Centos安装fabric遇到的问题和解决方法

    这篇文章给大家分享的是一个之前碰到的问题了,今天有空写出来,让遇到这个问题的朋友能尽快解决,下面来一起看看吧。
    2016-09-09

最新评论