首页 > 其他分享 >说说你对target="_blank"的理解?有啥安全性问题?如何防范?

说说你对target="_blank"的理解?有啥安全性问题?如何防范?

时间:2024-11-22 11:19:24浏览次数:1  
标签:target window opener rel blank noopener 安全性 页面

target="_blank" 的作用是在新标签页或窗口中打开链接。这很常见,用户也习惯了这种行为。然而,它确实存在一些安全风险,主要是因为新打开的页面可以通过 window.opener 访问原始页面的 window 对象。

安全问题:

  • 反向点击劫持 (Reverse Tabnabbing): 这是最主要的风险。恶意页面可以通过 window.opener.location 更改原始页面的 URL,将其重定向到钓鱼网站或其他恶意网站。用户可能没有意识到原始标签页已经被更改,从而泄露敏感信息。
  • 钓鱼攻击: 结合其他技术,攻击者可以利用 _blank 进行更复杂的钓鱼攻击。例如,他们可以将用户重定向到一个看起来像登录页面的假网站,窃取用户的凭据。
  • 恶意代码注入: 恶意页面可以利用 window.opener 在原始页面中注入 JavaScript 代码,从而执行各种恶意操作,例如窃取 cookie、修改页面内容或发起 XSS 攻击。

防范措施:

  • rel="noopener": 这是最推荐的解决方案。它会阻止新打开的页面访问 window.opener,有效地切断了两个页面之间的联系。 在 HTML 中,只需添加 rel="noopener" 属性即可:<a href="..." target="_blank" rel="noopener">...</a>

  • rel="noreferrer":noopener 类似,noreferrer 也能阻止新打开的页面访问 window.opener。 此外,它还会阻止 Referer 头信息的发送,这可以提高用户的隐私性。 在 HTML 中,添加 rel="noreferrer" 属性:<a href="..." target="_blank" rel="noreferrer">...</a>。 如果需要发送 Referer 信息但又要防止 Tabnabbing,则应使用 noopener

  • rel="noopener noreferrer": 可以同时使用 noopenernoreferrer,以获得更高的安全性。 <a href="..." target="_blank" rel="noopener noreferrer">...</a>

  • JavaScript 中打开新窗口并设置 openernull: 虽然不推荐,但也可以在 JavaScript 中动态创建新窗口,并在打开后立即将 window.opener 设置为 null。 例如:

const newWindow = window.open('https://example.com', '_blank');
if (newWindow) {
  newWindow.opener = null;
}
  • 沙盒化 iframe: 对于一些需要更强隔离的情况,可以考虑将链接放在沙盒化的 iframe 中打开。 这可以限制 iframe 中代码的权限,进一步提高安全性。

  • CSP (Content Security Policy): CSP 是一种更全面的安全机制,可以用来限制页面加载的资源和执行的脚本。 虽然它不能直接解决 target="_blank" 的问题,但可以减轻潜在的恶意代码注入风险。

总结:

为了确保安全性,强烈建议始终在使用 target="_blank" 时添加 rel="noopener"rel="noopener noreferrer"。 这是一种简单而有效的措施,可以防止潜在的 Tabnabbing 攻击和其他安全风险。 其他方法可以作为补充,但 rel="noopener" 应该是首选的解决方案。

标签:target,window,opener,rel,blank,noopener,安全性,页面
From: https://www.cnblogs.com/ai888/p/18562416

相关文章

  • CRM系统安全性排名:数据保护能力评估
    安全性对CRM系统厂商和企业来说至关重要,因为它直接关系到企业的客户数据、商业机密和品牌信誉。CRM系统通常存储了大量敏感信息,包括客户联系详情、交易记录和个人身份信息,一旦发生数据泄露或安全事件,不仅可能导致客户信任丧失、法律诉讼和经济损失,还可能对企业的市场竞争力和长期......
  • 在电气安装中通过负载箱实现最大效率和安全性
    在电气安装中,负载箱是一种常用的设备,主要用于模拟实际的电力负载,以便进行各种电气设备的测试和调试。通过负载箱,可以实现最大效率和安全性,从而提高电气设备的运行性能和使用寿命。负载箱可以实现最大效率,在电气设备的安装和调试过程中,需要对设备进行各种性能测试,以确保设备的正常......
  • 详细!基于php+mysql的同城交友圈子,如何保证源码的安全性?
    一、圈子系统架构前端:Uniapp-vue2.0后端:Thinkphp6前后端分离 系统支持:H5+小程序+双端APP(安卓+苹果)二、社区圈子源码安全性如何保证?权限控制:在开发过程中,通过设置严格的权限控制,确保开发人员只能访问与其工作相关的源代码部分,防止敏感信息的泄露。加密源代码:对源代码进......
  • toolchain build host target
    一个程序开发完成以后,对源代码进行编译,将编译后的文件发布出去形成所谓的各个平台的安装版本(非开源的都是这么干的,开源的也可以这样编译后不同运行平台的编译版本),这就是所谓的交叉编译。下面介绍有关这平台相关性的选项。  --build=BUILD  configureforbuildingonBU......
  • 一次性秘钥的语义安全性
    通过两个实验来定义语义安全性有一个试图攻击系统的敌人Adv.A。(类似于伪随机数生成器中的统计测试)有两个Challenger,非常相似,用0或1来区分。会做些什么呢?:(1)从秘钥空间K中随机选择秘钥k;(2)敌人会输出两条消息m......
  • CCS XDS100 V1仿真器配置Target Configurations设备栏空白解决方法(仿真器驱动更新)
    设备:普中科技TMS320F28335开发板仿真器:XDS100v1问题:打开CCS后,导入工程之后,要配置TargetConfigurations的时候,选择了TexasInstrumentsXDS100v1USB,但是下方的设备选项是空白,没有出现芯片选项。解决方法:(1)打开我的电脑-管理-设备管理器,检查是否出现TI端口,如下图(2......
  • 如何禁止 SQL Server 中的 xp_cmdshell 以提高安全性
    概述在SQLServer中,xp_cmdshell是一个强大的功能,它允许执行操作系统级别的命令。然而,这也带来了潜在的安全风险。本文将详细介绍如何禁止xp_cmdshell,以增强SQLServer的安全性。禁止 xp_cmdshell 的步骤步骤1:检查 xp_cmdshell 的当前状态在开始禁止xp_cmdshell之......
  • Anthropic公司CEO达里奥·阿莫代伊(Dario Amodei)深入探讨了通用人工智能(AGI)、AI安全性
      每周跟踪AI热点新闻动向和震撼发展想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领域的领跑者。点击订阅,与未来同行!订阅:https://......
  • Java常用方法:StringUtils.isNotBlank()、StringUtils.isEmpty()、去除空格的函数、手
    Java常用方法:StringUtils.isNotBlank()、StringUtils.isEmpty()、去除空格的函数、手机号中间4位换成*、判断字符是否为数字要使用工具类StringUtils,首先得导入依赖<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><ve......
  • 详细介绍了openwrt的防火墙以及target的方式DNAT SNAT
    在OpenWrt中设置端口转发(PortForwarding)有两种方式:通过UCI命令行或直接编辑配置文件。使用UCI命令行方式:#添加端口转发规则uciaddfirewallredirectucisetfirewall.@redirect[-1].name='my-service-forward'ucisetfirewall.@redirect[-1].src='wan'ucisetfi......