测试准备
1. 环境要求
-
本地 Web 服务器:用于托管两个测试页面(原页面和恶意页面)。
-
现代浏览器:推荐 Chrome 或 Firefox(测试前需关闭自动安全防护)。
2. 工具选择
-
Python 简易服务器(快速启动):
# 安装 Python(若未安装) # 在项目目录下运行: python3 -m http.server 8000 -
或使用其他工具:如
http-server(Node.js)等。
步骤 1:创建测试页面
1. 原页面(legitimate-site.html)
2. 恶意页面(evil-site.html)
3. 钓鱼页面(phishing-site.html,模拟攻击目标)
<!DOCTYPE html>
<html>
<head>
<title>钓鱼网站</title>
</head>
<body>
<h1>⚠️ 警告:这是伪造的登录页面!</h1>
<p>(模拟诱导用户输入密码的界面)</p>
</body>
</html>
步骤 2:启动本地服务器
-
将以上三个文件(
legitimate-site.html、evil-site.html、phishing-site.html)放在同一目录。 -
启动本地服务器:
-
访问原页面:
http://localhost:8000/legitimate-site.html
步骤 3:模拟攻击测试
-
点击不安全链接
在原页面中点击“点击这里查看消息”,浏览器会在新标签页打开恶意页面。 -
观察原页面变化
-
攻击成功:原页面(
legitimate-site.html)会自动跳转到phishing-site.html,显示伪造的登录界面。 -
攻击失败:原页面保持原样,说明浏览器已默认阻止
window.opener操作(如 Chrome ≥88)。
-
步骤 4:验证防御措施
修改原页面的链接,添加 rel="noopener":
重复测试步骤,原页面将不再跳转,证明防御生效。
浏览器兼容性测试
| 浏览器 | 是否默认阻止 window.opener |
测试结果(未修复时) |
|---|---|---|
| Chrome ≥88 | 是 | 攻击失败 |
| Firefox ≥79 | 是 | 攻击失败 |
| Safari | 否 | 攻击成功 |
| 旧版浏览器(如 IE) | 否 | 攻击成功 |
高级测试(跨域场景)
-
模拟不同域名
修改evil-site.html的链接为外部域名(需部署到真实服务器):<a href="https://your-malicious-site.com/evil-page" target="_blank">外部攻击链接</a> -
检查跨域限制
-
即使跨域,
window.opener.location仍可修改原页面(同源策略不阻止此操作)。
-
注意事项
-
合法测试
-
仅在本地或授权环境中测试,勿对真实网站进行未经许可的安全测试。
-
-
浏览器设置
-
若使用现代浏览器(如 Chrome 88+),需手动关闭默认防护:
-
总结
通过上述测试,你可以直观看到反向 Tab 劫持的攻击效果和防御方法。关键结论:
-
漏洞存在条件:未使用
rel="noopener"的target="_blank"链接。 -
修复方法:添加
rel="noopener"或rel="noreferrer"。 -
浏览器兼容性:现代浏览器已部分防御,但旧版仍需手动修复。