iis、apache、nginx使⽤X-Frame-Options防⽌⽹页被
Frame的解决⽅法
当然也是因为被360检测到了⽰"X-Frame-Options头未设置",根据360的提⽰与百度了⼀些⽹上的⼀些资料整理了下,完美解决问题。
⾸先看下360给出的⽅案,但么有针对服务器的具体设置,不是每个⼈对服务器都很懂啊。
描述:⽬标服务器没有返回⼀个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中加⼊:nginx和apache区别
header('X-Frame-Options: deny');
下⾯继续来看下从⽹上整理的更详细的⽅法
防⽌⽹页被Frame,⽅法有很多种;
⽅法⼀:常见的⽐如使⽤js,判断顶层窗⼝跳转:
(function () {
if (window != p) {
}
})();
⼀般这样够⽤了,但是有⼀次发现失效了,看了⼀下⼈家⽹站就是顶层窗⼝中的代码,发现这段代码:
var location = document.location;
// 或者 var location = "";
轻轻松松被破解了,悲剧。
⽅法⼆: meta 标签:基本没什么效果,所以也放弃了:
<meta http-equiv="Windows-Target" contect="_top">
⽅法三:使⽤HTTP 响应头信息中的 X-Frame-Options属性
使⽤ X-Frame-Options 有三个可选的值:
DENY:浏览器拒绝当前页⾯加载任何Frame页⾯
SAMEORIGIN:frame页⾯的地址只能为同源域名下的页⾯
ALLOW-FROM:origin为允许frame加载的页⾯地址
绝⼤部分浏览器⽀持:
Feature Chrome Firefox (Gecko)Internet Explorer Opera Safari
Basic support4.1.249.10423.6.9(1.9.2.9)8.010.5  4.0
配置 IIS
IIS6中通过HTTP头设置即可
IIS7中可以通过fig也可以通过类似上⾯的设置
配置 IIS 发送 X-Frame-Options 响应头,添加下⾯的配置到 fig ⽂件中: <system.webServer>
...
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="SAMEORIGIN" />
</customHeaders>
</httpProtocol>
...
</system.webServer>
图⽂界⾯设置
配置 Apache
配置 Apache 在所有页⾯上发送 X-Frame-Options 响应头,需要把下⾯这⾏添加到 ‘site' 的配置中:
Header always append X-Frame-Options SAMEORIGIN
配置 nginx
配置 nginx 发送 X-Frame-Options 响应头,把下⾯这⾏添加到 ‘http', ‘server' 或者 ‘location' 的配置中:
add_header X-Frame-Options SAMEORIGIN;
HAProxy配置
rspadd X-Frame-Options:\ SAMEORIGIN
tomcat 与X-Frame-Options
公司项⽬是只⽤了tomcat作为web服务器 ,⽹上搜的的内容好像并不符合我的要求。
本来的想法是在每个jsp页⾯中加
<%
response.addHeader("x-frame-options","SAMEORIGIN");
%>
可后来想想这种⽅法太蠢,万⼀过不了测试还要改过来。
于是⼜想到了⼀个⽅法,在项⽬原本的过滤器中加了如下代码
HttpServletResponse response = (HttpServletResponse) sResponse;
response.addHeader("x-frame-options","SAMEORIGIN");
貌似起了作⽤等待客户测试吧!
具体可以查看:
结果
在 Firefox 尝试加载 frame 的内容时,如果 X-Frame-Options 响应头设置为禁⽌访问了,那么 Firefox 会⽤ about:blank 展现到frame 中。也许从某种⽅⾯来讲的话,展⽰为错误消息会更好⼀点。
⽤虚拟主机的⽤户怎么办呢
PHP和JSP等动态⽂件更⽅便
改⼀下头信息
PHP代码:
header(‘X-Frame-Options:SAMEORIGIN');
JSP代码:
response.setHeader(“X-Frame-Options”,”SAMEORIGIN”);
ASP代码:
<%Response.AddHeader "X-Frame-Options","SAMEORIGIN"%>
ASP.NET代码:
Response.AddHeader("X-Frame-Options", "Deny");
还是那句话如果确认你整个⽹站都不能被框架,可以直接设置web服务器,增加X-Frame-Options响应头。IIS如下图所⽰,增加http头,参考上⾯的iis6与iis7中的设置⽅法
浏览器对X-Frame-Options响应头的⽀持如下
浏览器版本⽀持
IE8.0+
Firefox  3.6.9+
Opera10.50+
Safari  4.0+
Chrome4.1.249.1024+

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。