Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么浏览器允许onmousedown JS更改href?_Javascript_Security_Href_Phishing - Fatal编程技术网

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

Javascript 为什么浏览器允许onmousedown JS更改href?,javascript,security,href,phishing,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上打开一个链接时,它会修改链接并通过
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)[…]
放在
标记中。第二次右键单击链接时,我看到Firebug中的
href
属性更改

这让我担心

我们中的许多人给不太懂技术的人的建议(在你点击之前检查链接带你去哪里,这样你就不会成为网络钓鱼的受害者)现在似乎已经没有用了。这不是一个安全风险吗?网络钓鱼网站不能滥用吗

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

编辑:我想简单地强调,比起网络钓鱼的风险,更让我困扰的是,用户被误导了,我觉得这种情况可能发生是不对的,无论是由可信来源还是非可信来源造成的

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

不太可能,因为facebook是调用上述javascript的来源。用户必须首先找到一个不受信任的源,然后将javascript嵌入到标记中

我们中的许多人给不太懂技术的人的建议(在你点击之前检查链接带你去哪里,这样你就不会成为网络钓鱼的受害者)现在似乎已经没有用了

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

$('a').click(function(evt){evt.preventDefault();window.location.href="http://google.com"})

我同意这里存在网络钓鱼的可能性。这是很久以前的报道,但问题是:

<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=“www.somewhere.com”;
返回false;
}
因此,我们需要注意onmousedown事件触发的函数中的
window.location
。听起来仍然合理吗?如果我让onmousedown事件完全删除链接,用新元素替换它,然后触发对它的单击。我可以继续提供示例

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

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


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

有这样的限制并不能解决任何问题。Onmousedown链接更改是一种令人难以置信的恼人行为,因为它使快速执行链接劫持变得复杂aste链接。也就是说,外发点击跟踪很重要,因此,如果浏览器支持更透明的劫持点击方法,可能会是更好的解决方案。即使是受信任的站点也可能成为漏洞的受害者,这些漏洞允许攻击者注入这样的代码。如果“受信任的站点”易受XSS攻击,我相信前面提到的ned漏洞将是攻击者最不希望利用的漏洞。只是为了更好地理解这一点并了解您的看法:那么,浏览器是否可能延迟鼠标操作,直到导航发生之后?这将意味着如果链接位于页面内(例如
href=“#foo”
)JS仍然可以工作(浏览器可以在url预览中指出这一点),但如果链接实际指向另一个页面,则会将您发送到您实际认为您将要访问的页面。如Tgr所建议的,如果浏览器透明地告诉网站您将要访问的位置,则浏览器可以使用一个小图标让您知道该站点正在被告知。要重新表述您的方法:首先让导航基于当你点击链接时,他href该链接的值,然后执行Javascript事件,并用一个图标告诉用户Javascript事件将被导航延迟。我看到的问题是:如果该事件旨在停止导航怎么办?我有更多的想法,我无法加入评论,我们是否应该转移到聊天室?当然。我没有使用它以前。你是建立一个新的聊天室还是使用像JS这样的现有聊天室?虽然我还没能进入聊天室,但我的问题似乎没有简单的答案。如果你能发布这些不同方法的链接/简要总结,那就太好了。我希望得到一个答案,既能(a)解释为什么没有简单的解决方案,又能(b)解释为什么没有简单的解决方案分享了一个关于未来的想法:链接是否总是这样,或者有什么我们可以期待的吗?我想你的答案几乎就在那里。无论如何,我接受它,尽管,就像我之前所说的,你提到的那些想法的链接或解释会很好。