21

很长一段时间以来,我注意到当您尝试复制链接位置或在 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>标签。第二次我右键单击该链接,我看到了hrefFirebug 中的属性更改。

这让我很担心。

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

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

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

4

3 回答 3

5

我同意这里存在网络钓鱼的可能性。很久以前,这被报告为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>

所以我们也需要注意window.location由 onmousedown 事件触发的 in 函数。听起来还合理吗?如果我让 onmousedown 事件完全删除链接,用新元素替换它,然后触发点击该链接怎么样。我可以不断提出例子。

关键是,Javascript 可以被用来误导人们使用状态栏——你不应该相信它,你只能相信 URL。

要更改此浏览器需要在单击总统时在链接上提供设置的 href 值,而不是可能发生的任何其他事件,基本上禁用锚标记上的鼠标事件。我敢猜测他们可能不会这样做,它会破坏太多已经存在的应用程序。

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

于 2011-08-26T16:13:16.690 回答
3

我们中的许多人向不太精通技术的人提供的建议(在单击之前检查链接会将您带到哪里,以免您成为网络钓鱼的受害者)现在似乎变得毫无用处。

如果通过“检查”您的意思是链接“预览”浏览器显示在底部状态栏,那么您是正确的。这还不足以检查一个链接是否真的到达了它声称要去的地方。例如,在页面上运行下面的 jquery 脚本将导致所有链接转到 google.com,而不管链接的实际 href 目标是什么:

$('a').click(function(evt){evt.preventDefault();window.location.href="http://google.com"})
于 2011-08-26T15:05:23.507 回答
2

钓鱼网站不能滥用这个吗?

不是真的,因为 facebook 是必须调用上述 javascript 的地方。用户首先必须去一个不受信任的来源,将 javascript 嵌入标签中。

于 2011-08-26T14:32:59.590 回答