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

Uma*_*ang 21 javascript security href phishing

我已经注意到很长一段时间,当你尝试复制链接位置或在Facebook上打开一个链接时,它会修改链接并传递它l.php.

例如,我可以被发送到

 http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.google.com%2F&h=DKVUritNDJDJLDLVbldoDLFKBLOD5dlfDJY_-d3fgDUaA9b
Run Code Online (Sandbox Code Playgroud)

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

今天,我使用Firebug进行了仔细研究,发现Facebook投入onmousedown="UntrustedLink.bootstrap($(this)[...]<a>标签.第二个我右键单击链接,我看到hrefFirebug中的属性更改.

这让我担心.

我们很多人给不太精通技术的人提供的建议(在点击之前检查链接带你到哪里,这样你就不会成为网络钓鱼的受害者)现在似乎变得毫无用处.这不是安全隐患吗?网络钓鱼网站不能滥用这个吗?

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

编辑:我想简单地强调,除了网络钓鱼的风险之外,困扰我的是用户被误导,我觉得这种情况可能会发生,无论是否受信任来源.

nwe*_*ome 5

我同意此处存在网络钓鱼的可能性.很久以前,这被报道为FireFox中的一个错误,但问题是:

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

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

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

所以我们需要注意window.location由onmousedown事件触发的函数.还是合理吗?如果我有onmousedown事件完全删除链接,用一个新元素替换它然后触发点击该怎么样.我可以继续提出例子.

关键是,Javascript可以用来误导使用状态栏的人 - 你不应该信任它,你只能信任URL.

要更改此浏览器,需要在点击主持时对链接上的set href值超过可能发生的任何其他事件,基本上禁用锚标记上的鼠标事件.我冒昧地猜测他们可能不会这样做,它会破坏已经存在的太多应用程序.

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