点击劫持
2024/9/1大约 1 分钟
点击劫持
在网页覆盖一个透明iframe页面,诱使用户点击
攻击方式
隐藏页面
<html>
<head>
<style>
iframe {
position: absolute
top: -800px;
width: 400px;
height: 400px;
z-index: 999;
opacity: 0;
}
</style>
</head>
<body>
<iframe src="http://..."> </iframe>
</body>
</html>position使用绝对路径z-index才会生效,z-index控制覆盖顺序因此足够大才保证覆盖页面,opacity调整透明度
图片覆盖攻击
调整图片style属性,将图片覆盖在指定位置,伪造成一个正常网站,或者覆盖正确内容
拖拽劫持
诱使用户在不可见“iframe”页面拖拽出所需数据到另一可控页面
现代浏览器为防御规定无法从跨域iframe页面拖拽出数据,但可在不同窗口间拖拽
文件劫持
上传文件伪造成下载文件位置,诱使用户将整个文件夹上传,目前浏览器进行该操作会提示是否上传
防御
Frame Busting
写一段javascript代码禁止iframe嵌套
if ( top.location != location ){
top.location = self.location;
}常见检测方法:
- if (top != self)
- if (top.location != self.location)
- if (top.location != location)
- if (parent.frames.length > 0)
- if (window != top)
- if (window.top !== window.self)
- if (parent && parent != parent.window)
- if (parent && parent.frames && parent.frames.length>0)
- if ((self,parent && !(self.parent === self)) && (self,parent.frames.length != 0))
漏洞:由于使用javascript编写存在绕过风险,且可通过设置iframe的sandbox属性使其失效
Cookie:SameSite
iframe页面属于未登录状态无法实施攻击
X-Frame-Options
- DENY:拒绝当前页面通过frame加载
- SAMEORIGIN:只能被同源页面加载
- ALLOW-FROM=url:定义哪些URL可通过frame加载该页面
CSP:frame-ancestors
设置frame-ancestors属性构建白名单
贡献者
云影
