X-FRAME-OPTIONS 未设置导致的 Clickjacking 漏洞修复

Nginx  

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

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

  • 发现时间:2016-06-30

  • 漏洞类型:跨站脚本攻击(XSS)

  • 所属建站程序:其他

  • 所属服务器类型:通用

  • 所属编程语言:其他

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


解决方案

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


  1. DENY:不能被嵌入到任何iframe或frame中。

  2. SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中。

  3. ALLOW-FROM uri:只能被嵌入到指定域名的框架中。


换一句话说,如果设置为 DENY,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为 SAMEORIGIN,那么页面就可以在同域名页面的 frame 中嵌套。


Nginx 修复方案


在网站配置中增加以下设置:

add_header X-Frame-Options "SAMEORIGIN";


例子:

server {
    server_name  www.abclogs.com;
    listen  80;
    add_header X-Frame-Options "SAMEORIGIN";
}


Apache, IBM HTTP Server 修复方案


在 .htaccess 中增加以下设置:

Header append X-FRAME-OPTIONS "SAMEORIGIN"


IIS 修复方案


配置 IIS 发送 X-Frame-Options 响应头,添加下面的配置到 Web.config 文件中:


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


在 Firefox 尝试加载 frame 的内容时,如果 X-Frame-Options 响应头设置为禁止访问了,那么 Firefox 会用 about:blank 展现到 frame 中。也许从某种方面来讲的话,展示为错误消息会更好一点。


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

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



可在浏览器调试中测试,服务响应内容如下:


Request URL:https://www.abclogs.com/

Request Method:GET

Status Code:200 OK


Response Headers

Connection:keep-alive

Content-Encoding:gzip

Content-Type:text/html; charset=utf-8

Date:Fri, 14 Apr 2017 03:02:02 GMT

Product:Z-BlogPHP 1.5.1 Zero

Server:nginx/1.10.3

Transfer-Encoding:chunked

Vary:Accept-Encoding

X-Frame-Options:SAMEORIGIN

X-Powered-By:PHP/7.1.1


时间:2017年04月14日    作者:孟德    分类:Linux   浏览:4148    评论:0

链接地址:https://www.abclogs.com/linux_clickjacking_x-frame-options_secure.html