最近项目要交付了,对方安全测试的时候检测出高危险漏洞,由于刚参加工作不久,经验不足,未涉及过此方面的东西。经过一番查询和探索,最终解决了这个问题,记录一下。 发现的漏洞为缺少跨框架脚本保护。跨框架脚本(XFS)漏洞使攻击者能够在恶意页面的 HTMLiframe 标记内加载易受攻击的应用程序。攻击者可以使用       此漏洞设计点击劫持攻击,以实施钓鱼式攻击、框架探查攻击、社会工程攻击或跨站点请求伪造攻击。个人理解就是其他网站会在他的iframe中调用我的网站内容,来截取他人的点击事件或者窃取他人敏感信息。

在网上查了一下,有这类问题的说明,但是都是告诉要设置什么,却没有说具体在哪里配置。最后只能自己想办法。检测结果中提出了修复的方法:

浏览器供应商已使用 X-Frame-Options标头引入并采用基于策略的缓解技术。如果站点包含在 iframe内,则开发人员可以使用此标头指示浏览器执行相应操作。开发人员必须将X-Frame-Options标头设置为以下允许的值之一:

· DENY拒绝设置页面框架的所有尝试

· SAMEORIGIN仅当另一页面与设置框架的页面属于同一源时,该另一页面才能充当此页面的框架

· ALLOW-FROM源开发人员可以在源属性中指定受信源列表。只有源中的页面才允许在 iframe内部加载此页面

开发人员还必须使用客户端 frame busting JavaScript作为对 XFS的保护。这样也将保护不支持X-Frame-Options标头的旧版本浏览器用户免受点击劫持攻击。

关于X-Frame-Options,具体可以查看一下链接:

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/X-Frame-Options

讲解X-Frame-Options的很多,但是具体在哪里设置都不是很明确,看了半天并没有明白,也可能是本人能力有限,最后,个人猜测,我用的tomcat,编写的java web,既然是http响应头,那么不是跟server有关就是跟java web的web.xml有关,经过查看发现在Servers的web.xml中有一个关于X-Frame-Options的注解,在其下方有一个注释掉的filter,如下

  1. <!-- ================== Built In Filter Definitions ===================== -->
  2. <!-- A filter that sets various security related HTTP Response headers.   -->
  3. <!-- This filter supports the following initialization parameters         -->
  4. <!-- (default values are in square brackets):                             -->
  5. <!--                                                                      -->
  6. <!--   hstsEnabled         Should the HTTP Strict Transport Security      -->
  7. <!--                       (HSTS) header be added to the response? See    -->
  8. <!--                       RFC 6797 for more information on HSTS. [true]  -->
  9. <!--                                                                      -->
  10. <!--   hstsMaxAgeSeconds   The max age value that should be used in the   -->
  11. <!--                       HSTS header. Negative values will be treated   -->
  12. <!--                       as zero. [0]                                   -->
  13. <!--                                                                      -->
  14. <!--   hstsIncludeSubDomains                                              -->
  15. <!--                       Should the includeSubDomains parameter be      -->
  16. <!--                       included in the HSTS header.                   -->
  17. <!--                                                                      -->
  18. <!--   antiClickJackingEnabled                                            -->
  19. <!--                       Should the anti click-jacking header           -->
  20. <!--                       X-Frame-Options be added to every response?    -->
  21. <!--                       [true]                                         -->
  22. <!--                                                                      -->
  23. <!--   antiClickJackingOption                                             -->
  24. <!--                       What value should be used for the header. Must -->
  25. <!--                       be one of DENY, SAMEORIGIN, ALLOW-FROM         -->
  26. <!--                       (case-insensitive). [DENY]                     -->
  27. <!--                                                                      -->
  28. <!--   antiClickJackingUri IF ALLOW-FROM is used, what URI should be      -->
  29. <!--                       allowed? []                                    -->
  30. <!--                                                                      -->
  31. <!--   blockContentTypeSniffingEnabled                                    -->
  32. <!--                       Should the header that blocks content type     -->
  33. <!--                       sniffing be added to every response? [true]    -->
  34. <!--
  35. <filter>
  36. <filter-name>httpHeaderSecurity</filter-name>
  37. <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
  38. <async-supported>true</async-supported>
  39. </filter>
  40. -->
<!-- ================== Built In Filter Definitions ===================== -->

  <!-- A filter that sets various security related HTTP Response headers.   -->
<!-- This filter supports the following initialization parameters -->
<!-- (default values are in square brackets): -->
<!-- -->
<!-- hstsEnabled Should the HTTP Strict Transport Security -->
<!-- (HSTS) header be added to the response? See -->
<!-- RFC 6797 for more information on HSTS. [true] -->
<!-- -->
<!-- hstsMaxAgeSeconds The max age value that should be used in the -->
<!-- HSTS header. Negative values will be treated -->
<!-- as zero. [0] -->
<!-- -->
<!-- hstsIncludeSubDomains -->
<!-- Should the includeSubDomains parameter be -->
<!-- included in the HSTS header. -->
<!-- -->
<!-- antiClickJackingEnabled -->
<!-- Should the anti click-jacking header -->
<!-- X-Frame-Options be added to every response? -->
<!-- [true] -->
<!-- -->
<!-- antiClickJackingOption -->
<!-- What value should be used for the header. Must -->
<!-- be one of DENY, SAMEORIGIN, ALLOW-FROM -->
<!-- (case-insensitive). [DENY] -->
<!-- -->
<!-- antiClickJackingUri IF ALLOW-FROM is used, what URI should be -->
<!-- allowed? [] -->
<!-- -->
<!-- blockContentTypeSniffingEnabled -->
<!-- Should the header that blocks content type -->
<!-- sniffing be added to every response? [true] -->
<!--
<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<async-supported>true</async-supported>
</filter>
-->

于是把这个filter放入到java web的web.xml中进行测试,发现http相应头中有了关于X-Frame-Options的信息,最终经过尝试,成功的设置X-Frame-Options,如下:

  1. <filter>
  2. <filter-name>httpHeaderSecurity</filter-name>
  3. <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
  4. <async-supported>true</async-supported>
  5. <init-param>
  6. <param-name>antiClickJackingOption</param-name>
  7. <param-value>SAMEORIGIN</param-value>
  8. </init-param>
  9. </filter>
<filter>
<filter-name>httpHeaderSecurity</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>antiClickJackingOption</param-name>
<param-value>SAMEORIGIN</param-value>
</init-param>
</filter>

检测报告中的修复方法还说明了开发人员还必须使用客户端 frame busting JavaScript 作为对 XFS 的保护,故又进行了相关的查询,其实就是使用JavaScript来检测页面是否是当前打开页面的最外层,如果不是,将最外层的地址换成本页面的地址,实现方法很简单,如下:

  1. if (top != self) {top.location.replace(self.location.href); }
if (top != self) {top.location.replace(self.location.href); }

到此,就完成了,之前从未考虑过此方面的内容,果然,还是实际项目更加锻炼人。

IFrame安全问题解决办法(跨框架脚本(XFS)漏洞)的更多相关文章

  1. XFS: Cross Frame Script (跨框架脚本) 攻击。

    一.Cross Frame Script (跨框架脚本) 攻击什么是Cross Frame Script?很简单,做个实验就知道了.把下面的这段HTML代码另存为一个html文件,然后用ie浏览器打开 ...

  2. Cross Frame Script (跨框架脚本) 攻击

    一.Cross Frame Script (跨框架脚本) 攻击 什么是Cross Frame Script? 很简单,做个实验就知道了.把下面的这段HTML代码另存为一个html文件,然后用ie浏览器 ...

  3. ajax请求ashx跨域问题解决办法

    ajax请求ashx跨域问题解决办法 https://blog.csdn.net/windowsliusheng/article/details/51583566 翻译windowsliusheng  ...

  4. ASP.NET Core中的OWASP Top 10 十大风险-跨站点脚本攻击 (XSS)

    不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: https://dotnetcoretutorials.com/201 ...

  5. CefSharp 提示 flash player is out of date 运行此插件 等问题解决办法

    CefSharp 提示 flash player is out of date 或者 需要手动右键点 运行此插件 脚本 等问题解决办法 因为中国版FlashPlayer变得Ad模式之后,只好用旧版本的 ...

  6. 使用过滤器解决SQL注入和跨站点脚本编制

    1 SQL注入.盲注 1.1 SQL注入.盲注概述 Web 应用程序通常在后端使用数据库,以与企业数据仓库交互.查询数据库事实上的标准语言是 SQL(各大数据库供应商都有自己的不同版本).Web 应用 ...

  7. 跨站点脚本攻击XSS

    来源:http://www.freebuf.com/articles/web/15188.html 跨站点脚本攻击是一种Web应用程序的攻击,攻击者尝试注入恶意脚本代码到受信任的网站上执行恶意操作.在 ...

  8. android使用友盟实现第三方登录、分享以及微信回调无反应问题解决办法

    这里介绍微信和新浪登录.微信登录和新浪登录都需要申请第三方账号.可以参考官方文档http://dev.umeng.com/social/android/operation#2还是很清晰的. 新浪微博开 ...

  9. Taro 3 正式版发布:开放式跨端跨框架解决方案

    作者:凹凸曼 - yuche 从 Taro 第一个版本发布到现在,Taro 已经接受了来自于开源社区两年多的考验.今天我们很高兴地在党的生日发布 Taro 3(Taro Next)正式版,希望 Tar ...

随机推荐

  1. org.hibernate.QueryException: Unable to resolve path [SecWilldosetdate.name],xxxxxxxx...异常处理

    今天在写hql语句的时候出现了这个错误,然后一直运行到执行hql这儿就出错了.页面报500. 原hql如下: String hql = "from SecWilldosetdate wher ...

  2. [USACO12FEB]牛的IDCow IDs 一题多解(求二进制中有k个1 ,第n大的数)

    题目: FJ给他的奶牛用二进制进行编号,每个编号恰好包含K 个"1" (1 <= K <= 10),且必须是1开头.FJ按升序编号,第一个编号是由K个"1&q ...

  3. 零基础学QT编程

    吴迪.2010.1 北京航空航天大学出版社   Qt资源 CSDN QT http://bbs.csdn.net/forums/Qt/ QT编程网 http://www.qtbcw.com/ 编程论坛 ...

  4. dedecms 中变量函数

    {dede:global.cfg_cmsurl/} 是网站根目录{dede:global.cfg_cmsurl/} 是当前目录{dede:global.cfg_templets_skin/} 当前模板 ...

  5. [转] 利用CORS实现跨域请求

    [From] http://newhtml.net/using-cors/ 跨域请求一直是网页编程中的一个难题,在过去,绝大多数人都倾向于使用JSONP来解决这一问题.不过现在,我们可以考虑一下W3C ...

  6. 使用类和对象、方法、循环、List、泛型来实现简单的图书管理系统

    Book.java import java.util.List; import java.util.Scanner; public class Book { private String name; ...

  7. Java中使用nextLine(); 没有输入就自动跳过的问题

    转自:https://www.cnblogs.com/1020182600HENG/p/6564795.html [问题分析] 必要的知识:in.nextLine();不能放在in.nextInt() ...

  8. How to Setup a Private Proxy Server on EC2 in Under 10 Minutes

    How to Setup a Private Proxy Server on EC2 in Under 10 Minutes I’ve been slacking a bit with regular ...

  9. LeetCode 257.二叉树所有路径(C++)

    给定一个二叉树,返回所有从根节点到叶子节点的路径. 说明: 叶子节点是指没有子节点的节点. 示例: 输入: 1 / \ 2 3 \ 5 输出: ["1->2->5", ...

  10. STM32Cubemx出现工程突然自动退出的问题

    STM32Cubemx出现工程突然自动退出的问题 转载请注明出处,谢谢 https://www.cnblogs.com/kevin-nancy/p/10561944.html 或者 https://b ...