危险的target —— 另一种攻击方式
字数 948 2025-08-29 08:32:02
危险的target属性攻击方式详解
1. 传统opener攻击回顾
在HTML中,当使用target="_blank"打开新页面时,新页面可以通过window.opener对象控制源页面的URL,这可能导致钓鱼攻击:
<a href="https://evil.com" target="_blank">点击这里</a>
新打开的页面可以通过JavaScript修改原页面的URL:
window.opener.location = 'https://evil.com/phishing-page';
2. 新型target属性攻击
文章介绍了一种不依赖opener的攻击方式,利用target属性和window.name的特性。
攻击示例
<html>
<head><meta charset="utf-8"></head>
<body>
<a href="https://www.baidu.com" target="baidu" id="baidu">click me</a>
<script>
setInterval(function(){
baidu.href = "http://evil.com/baidu";
baidu.click();
}, 10000);
</script>
</body>
</html>
攻击原理
-
target属性机制:当
target属性不是_blank、_self、_parent或_top时,浏览器会使用指定的值作为新窗口的window.name。 -
攻击流程:
- 用户点击链接,打开目标网站(如百度)
- 攻击者通过JavaScript定时修改
<a>标签的href属性 - 再次自动点击该链接,在同一标签页打开新URL
- 由于
window.name相同,新页面会覆盖原页面
-
持久性特点:
- 即使用户在新标签页手动输入其他网址
- 或通过链接跳转到其他网站
- 地址栏仍然会被源页面控制
- 理论上只要源页面不关闭,可以永久控制目标页面的地址栏
3. 防御措施
针对传统opener攻击
<a href="https://example.com" target="_blank" rel="noopener noreferrer">安全链接</a>
或使用JavaScript:
var otherWindow = window.open();
otherWindow.opener = null;
otherWindow.location = url;
针对新型target攻击
-
避免使用非标准target值:除非必要,不要使用自定义的target名称
-
设置CSP策略:限制页面中可以执行的脚本
-
用户教育:提醒用户注意地址栏异常变化
-
浏览器更新:使用最新版浏览器,部分现代浏览器已对此类攻击有防护
4. 攻击影响
-
钓鱼攻击:显示伪造的URL地址,诱导用户输入敏感信息
-
持久性强:不像opener攻击那样容易被用户察觉
-
跨域限制:仍然受同源策略限制,但足以进行钓鱼攻击
5. 实际检测方法
用户可以通过以下方式检测是否遭受此类攻击:
- 打开开发者工具查看实际网络请求
- 检查页面是否包含可疑的定时脚本
- 尝试在新标签页手动输入网址,观察地址栏是否异常
6. 总结
这种新型target属性攻击展示了HTML特性可能被滥用的另一种方式,相比传统的opener攻击具有更强的持久性和隐蔽性。开发者在实现跳转功能时应充分了解这些安全风险,并采取适当的防护措施。