javascript - 为什么浏览器允许onmousedown JS改变href?

标签 javascript security href phishing

我很早就注意到,当您尝试复制链接位置或在 Facebook 上打开链接时,它会修改链接并将其传递给 l.php

例如我可以发送到

 http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.google.com%2F&h=DKVUritNDJDJLDLVbldoDLFKBLOD5dlfDJY_-d3fgDUaA9b

即使我的浏览器将链接预览呈现为 http://www.google.com/

今天,我用Firebug仔细观察了一下,发现Facebook把onmousedown="UntrustedLink.bootstrap($(this)[...]<a>标签。当我右键单击该链接时,我看到了 href Firebug 中的属性更改。

这让我很担心。

我们中的许多人向不太懂技术的人提供的建议(在点击链接之前检查链接会将您带到哪里,这样您就不会成为网络钓鱼的受害者)现在似乎已经变得毫无用处。这不是存在安全风险吗?钓鱼网站不能滥用这一点吗?

为什么浏览器不通过禁止 onmousedown 来阻止这种行为?更改 href或者在阅读 href 之前运行 javascript属性,以便我被发送到我想去的位置,而不是我单击它时发生的更改?

编辑:我想简单强调一下,比网络钓鱼风险更让我困扰的是用户被误导,我觉得这种情况发生是错误的,无论是否来自可信来源或不。

最佳答案

我同意这里存在网络钓鱼的可能性。这被报告为 bug in FireFox很久以前,但问题是这样的:

<body onmousedown="document.getElementById('changeMe').href='www.somewhereelse.com'">
    <a id="changeMe" href="www.google.com">google</a>
</body>

事件冒泡到其父元素,您需要检测 onmousedown 事件是否会更改子元素的 href。听起来有道理吗?好的,这个怎么样:

<script>
    function switcher() {
       window.location = "www.somewhereelse.com";
       return false;
    }
</script>
<body onmousedown="switcher()">
    <a href="www.google.com">google</a>
</body>

因此,我们还需要在 onmousedown 事件触发的函数中查找 window.location。听起来还合理吗?如果我让 onmousedown 事件完全删除链接,用新元素替换它,然后触发对该链接的单击,怎么样?我可以继续举出例子。

重点是,Javascript 可以通过状态栏来误导人们 - 你不应该相信它,你只能相信 URL。

要更改此浏览器需要在单击主席时在可能发生的任何其他事件上给出链接上设置的 href 值,基本上禁用 anchor 标记上的鼠标事件。我大胆猜测他们可能不会这样做,这会破坏太多已经存在的应用程序。

编辑:或者,我看到人们提出了不同的方法来检测和警告用户可能的链接劫持,但我还没有看到任何实现。

关于javascript - 为什么浏览器允许onmousedown JS改变href?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7205937/

相关文章:

security - 使用单独的 key 对进行签名和加密的目的是什么?

java - 从 href 中捕获文本

mysql - 将变量发送到下一页而不覆盖

jQuery:转到目标为 ="_blank"的 URL

javascript - 使用临时密码的 Firebase 电子邮件验证

JavaScript jQuery 延迟输入

javascript - 流和事件循环 - 数据处理程序是否总是在下一个时钟周期触发?

javascript - 如何在按下和按下按钮时连续递增

android - 如何在没有密码的情况下在android中存储私钥

java - 什么 Web 应用程序防火墙可以用于 Apache Tomcat?