使用HTTP 响应头信息中的 X-Frame-Options 属性防止网页被Frame

建站交流8年前 (2017-09-27)20630

X-Frame-Options头未设置

WASC Threat Classification

  • 发现时间:

  • 2016-06-30

         

  • 漏洞类型:

  • 跨站脚本攻击(XSS)

  • 所属建站程序:

  • 其他

  • 所属服务器类型:

  • 通用

  • 所属编程语言:

  • 其他

  • 描述:

  • 目标服务器没有返回一个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,判断顶层窗口跳转:

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

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

js 代码:var location = document.location;// 或者 var location = "";

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

注:此方式破解对IE6,IE7,IE9+、Chrome、firefox无效;

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

html 代码:<meta http-equiv="Windows-Target" contect="_top">

方法三:使用HTTP 响应头信息中的 X-Frame-Options属性

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

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

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

  3. ALLOW-FROM:origin为允许frame加载的页面地址

绝大部分浏览器支持:

FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support4.1.249.10423.6.9 (1.9.2.9)8.010.54.0

具体的设置方法:

Apache配置:

html 代码:Header always append X-Frame-Options SAMEORIGIN

nginx配置(域名配置文件里加入):

html 代码:add_header X-Frame-Options SAMEORIGIN;

如:add_header X-Frame-Options SAMEORIGIN;
        location ~ [^/]\.php(/|$)
        {
            # comment try_files $uri =404; to enable pathinfo
            try_files $uri =404;
            fastcgi_pass  unix:/tmp/php-cgi.sock;
            fastcgi_index index.php;
            include fastcgi.conf;
            #include pathinfo.conf;
        }

IIS配置:

html 代码:<system.webServer> ... 
 <httpProtocol> 
 <customHeaders> 
 <add name="X-Frame-Options" value="SAMEORIGIN" /> 
 </customHeaders> </httpProtocol>  ...
 </system.webServer>


“使用HTTP 响应头信息中的 X-Frame-Options 属性防止网页被Frame” 的相关文章

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。