X-Frame-Options HTTP响应头是用来确认是否浏览器可以在frame或iframe标签中渲染一个页面,网站可以用这个头来保证他们的内容不会被嵌入到其它网站中,以来避免点击劫持。
危害: 攻击者可以使用一个透明的、不可见的iframe,覆盖在目标网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击iframe页面的一些功能性按钮上,导致被劫持。
发现时间:2016-06-30
漏洞类型:跨站脚本攻击(XSS)
所属建站程序:其他
所属服务器类型:通用
所属编程语言:其他
描述: 目标服务器没有返回一个X-Frame-Options头。
修改web服务器配置,添加X-frame-options响应头。赋值有如下三种:
DENY:不能被嵌入到任何iframe或frame中。
SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中。
ALLOW-FROM uri:只能被嵌入到指定域名的框架中。
换一句话说,如果设置为 DENY,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为 SAMEORIGIN,那么页面就可以在同域名页面的 frame 中嵌套。
在网站配置中增加以下设置:
add_header X-Frame-Options "SAMEORIGIN";
例子:
server { server_name www.abclogs.com; listen 80; add_header X-Frame-Options "SAMEORIGIN"; }
在 .htaccess 中增加以下设置:
Header append X-FRAME-OPTIONS "SAMEORIGIN"
配置 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