跨框架脚本(XFS)漏洞使攻击者能够在恶意页面的 HTMLiframe 标记内加载易受攻击的应用程序。攻击者可以使用此漏洞设计点击劫持攻击,以实施钓鱼式攻击、框架探查攻击、社会工程攻击或跨站点请求伪造攻击。个人理解就是其他网站会在他的iframe中调用我的网站内容,来截取他人的点击事件或者窃取他人敏感信息。
1.怎么测试出此安全性问题
本地编写一个iframe.html页面文档,内容如下。
<html>
<head>
<title>IE Cross Frame Scripting Restriction Bypass Example</title>
<script>
var keylog='';
document.onkeypress=function(){
k=window.event.keyCode;
window.status=keylog += String.fromCharCode(k)+'['+k+']';
}
</script>
</head>
<body>
<frameset onload="this.focus();" onblur="this.focus();" cols="100%">
<iframe src="https://this.is.myweb.com" scrolling="auto" height=100% width=100%/>
</frameset>
</body>
</html>
https://this.is.myweb.com
是自己的页面url,如果能正常点击进入自己的页面,则有此安全问题。
2.修复办法
2.1 nginx增加配置
修改nginx服务器配置,添加X-frame-options响应头。赋值有如下三种:
(1)DENY:不能被嵌入到任何iframe或frame中。
(2)SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中,也就是同源的支持。
(3)ALLOW-FROM uri:只能被嵌入到指定域名的框架中 。(此种规则已经弃用)
很多时候在nginx中配置此规则之后,无法生效,一些博客说是因为浏览器的版本太新了,其实这个是不准确的。这是一个被弃用的指令,不再适用于现代浏览器,请不要使用它。在支持旧版浏览器时,页面可以在指定来源的 frame 中展示。请注意,在旧版 Firefox 上,它会遇到与 SAMEORIGIN
相同的问题——它不会检查 frame 所有的祖先页面来确定他们是否是同一来源。Content-Security-Policy
. HTTP 首部有一个 frame-ancestors
指令,你可以使用这一指令来代替。
nginx的configmap里面配置
add_header X-Frame-Options "SAMEORIGIN";
配置后,重启nginx服务器后,清除浏览器缓存后,再次点击iframe.html文件,会有以下报错:
网页无法打开
位于 https://this.is.myweb.co 的网页无法加载,因为:
net::ERR_CACHE_MISS
2.1 前端增加代码
<script>
if(top !=selt){
top.location=self.location;
}
if(window != window.top ){
window.top.location.href = correctURL;
}
***业务代码
参考:
https://codeleading.com/article/7179940468/
https://blog.csdn.net/yanner_/article/details/81428965
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/X-Frame-Options