为什么“悬停在”电子邮件中的链接被认为是安全的?还是有害?

信息安全 电子邮件 html 欺骗
2021-08-29 04:08:10

我们正在使用基于浏览器的电子邮件客户端,电子邮件内容为 HTML。

我的一位雇主告诉我们,如果我们收到一封带有链接的可疑电子邮件,我们必须先将鼠标悬停在链接上(以检查它不是被欺骗的),然后再单击它。将鼠标悬停会触发在浏览器状态栏中显示基础链接的操作。但是,有人能够欺骗这个动作并尝试做一些有趣的事情吗?

是一个类似的线程,但它讨论的是附件的缩略图,而不是电子邮件中的链接。

2个回答

我的一位雇主告诉我们,如果我们收到一封带有链接的可疑电子邮件,我们必须先将鼠标悬停在链接上(以检查它不是被欺骗的),然后再单击它。

当您将鼠标悬停在链接上时,href属性的值会显示在状态栏中。由于这是链接目标,它可以让您了解链接的去向。

有人能够欺骗这个动作并尝试做一些有趣的事情吗?

一般来说,是的。使用 Javascript 可以“欺骗”实际的链接目标:网站href在用户点击后立即与另一个链接交换价值是很常见的。例如,您可以在访问 Google 搜索结果时观察到这一点。当您将鼠标悬停在其中一个链接上时,它将显示为,https://security.stackexchange.com/...但一旦您单击它,该事件就会被捕获,并且您首先访问一个中间站点 ( https://www.google.com/url?...),它将您重定向到实际目标。

但是任何设计良好的(基于 Web 的)邮件客户端都不会在 HTML 电子邮件中执行任何 JS。电子邮件中的活动脚本内容是危险的——不仅因为它可能导致邮件客户端出现 XSS 漏洞,而且因为它还可以用于针对浏览器运行基于 JS 的漏洞利用,或者只是通知发件人您已经打开了邮件。

因此,如果您的邮件客户端不允许在电子邮件中使用 JS(它很可能会这样做),那么鼠标悬停时显示的链接确实是正确的链接目标。但是您应该注意其他欺骗您的尝试,例如同形异义词攻击或伪装实际目标域的过长 URL。在状态栏中分析 URL 并不像在地址栏中查看它那样容易。在更高级的攻击中,攻击者还可能事先入侵了合法站点(例如,通过持久性 XSS 漏洞),并且您根本无法从链接中看出该站点现在实际上托管了危险内容。

这只能通过 JavaScript 来实现。您可以将链接设置为任何内容,然后编写一个 onclick 操作将用户发送到其他地方:

<a href="http://example.com" onclick="window.location = 'http://www.google.com';return false;">click</a>

但是,如果您允许 JavaScript 由基于浏览器的电子邮件客户端执行,那么您很容易受到持久性 XSS 的攻击,这意味着您会遇到更大的问题。

顺便说一句,告诉用户做[不方便的事情]几乎永远不会作为安全机制起作用。更好的解决方案是去除所有a标签并替换实际链接。