• 基于iframe的CFS(Cross Frame Script)和Clickjacking(点击劫持)攻击


    攻击原理:
        CFS攻击(Cross Frame Script(跨框架脚本)攻击)是利用浏览器允许框架(frame)跨站包含其它页面的漏洞,在主框架的代码
    中加入scirpt,监视、盗取用户输入。
        Clickjacking(点击劫持) 则是是一种视觉欺骗手段,在web端就是iframe嵌套一个透明不可见的页面,让用户在不知情的情况下,
    点击攻击者想要欺骗用户点击的位置。
        CFS 和 Clickjacking其实都是基于网页iframe产生的攻击。当没有预防的时候,攻击者可以利用iframe的方式包含你的网页,
    采用欺骗的方式,引导用户过来点击,利用监听盗取用户输入信息或者是利用样式控制或者骗取用户点击某个特定的区域,而达到
    获取劫持的目的。

    防止被 FRAME 加载你的网站页面

    1. meta 标签:很多时候没有效果,无视

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

     

    2. js 判断顶层窗口跳转,可轻易破解,意义不大

    function locationTop(){
        if (top.location != self.location) {
            top.location = self.location;
            return false;       
        }
        return true;
    }
    locationTop();

    破解:

    // 顶层窗口中放入代码
    var location = document.location;
    // 或者 var location = "";

     【像淘宝前端页面用的js:

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

     

    3. header 控制,绝大部分浏览器支持

     

    网站Sitemap的一些规则 

    使用 X-Frame-Options 有三个可选的值:

    DENY:浏览器拒绝当前页面加载任何Frame页面

    SAMEORIGIN:frame页面的地址只能为同源域名下的页面

    ALLOW-FROM:允许frame加载的页面地址

    PHP代码:

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

    Nginx配置:

    add_header X-Frame-Options SAMEORIGIN

    Apache配置:

    Header always append X-Frame-Options SAMEORIGIN

    具体参见:https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options?redirectlocale=en-US&redirectslug=The_X-FRAME-OPTIONS_response_header

    注明: 如果是针对 安全扫描 appscan 或者CFCA认证 用的webinspect 这些工具的话扫出来的 Cross_Frame SCRIPT之类的high级别的安全问题,用第三条解决是可以过扫描的。如果不是过工具扫描,上述三中方案都是可行的。
    在java中加入header deny方法如下(spring mvc,其他框架大同小异)
      @RequestMapping("/login")     public String login(HttpServletRequest request,HttpServletResponse response) {         HttpSession session = request.getSession();         session.invalidate();         response.addHeader("x-frame-options","DENY");         return "login";     }
    之所以扫描工具不认前端js跳出frame也是有道理的,毕竟破前端js难度不大
  • 相关阅读:
    java一个字符串中出现次数最多的字符以及次数
    按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”
    Java 替换空格
    Java中equals()和“==”区别
    ramfs和tmpfs的区别
    C语言中的nan和inf使用
    Abp中SwaggerUI的多个接口文档配置说明
    Abp中SwaggerUI的接口说明文档配置
    Abp中SwaggerUI的接口文档添加上传文件参数类型
    Abp中自定义Exception的HttpStatusCode
  • 原文地址:https://www.cnblogs.com/firstdream/p/8308727.html
Copyright © 2020-2023  润新知