Подтвердить что ты не робот

Почему браузеры позволяют использовать JS для изменения href?

Я очень давно заметил, что при попытке скопировать ссылку или открыть ссылку на 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>. Второй, который я нажал правой кнопкой мыши по ссылке, увидел, что в Firebug изменилось атрибут href.

Меня это беспокоит.

Совет, который многие из нас предоставили менее технически подкованным людям (проверьте, где ссылка принимает вас до того, как вы нажмете, чтобы вы не стали жертвой фишинга) теперь кажется бесполезной. Разве это не риск для безопасности? Нельзя ли использовать фишинговые веб-сайты?

Почему браузеры не предотвращают это поведение, запрещая onmousedown изменять href или запуская javascript перед чтением атрибута href, поэтому я отправляюсь в место, которое, как я думал, не одно изменение, пока я нажимал на него?

Изменить. Я хочу вкратце подчеркнуть, что то, что беспокоит меня больше, чем риск фишинга, заключается в том, что пользователи вводятся в заблуждение, и мне просто кажется, что это может произойти, будь то доверенный источник или нет.

4b9b3361

Ответ 1

Я согласен, что здесь есть потенциал для фишинга. Об этом сообщается как ошибка в 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. Все еще звучит разумно? Как насчет того, если у меня есть событие onmousedown, удалите ссылку в целом, замените ее новым элементом и затем нажмите на нее щелчок. Я могу придумать примеры.

Дело в том, что Javascript может использоваться для неправильного перенаправления людей с помощью строки состояния - вы не должны доверять ему, вы можете доверять только URL-адресу.

Для изменения этого браузера необходимо будет указать значение set href на ссылке во время президентства клика над любыми другими событиями, которые могут произойти, в основном отключить события мыши на тегах привязки. Я бы рискнул предположить, что они, вероятно, этого не сделают, это сломает слишком много приложений, которые уже существуют.

Изменить: В качестве альтернативы, я видел, как люди предлагают разные методы обнаружения и предупреждения пользователя о возможном удалении ссылок, но я еще не видел каких-либо реализованных приложений.

Ответ 2

Совет, который многие из нас предоставили менее технически подкованным людям (проверьте, где ссылка принимает вас до того, как вы нажмете, чтобы вы не стали жертвой фишинга) теперь кажется бесполезным.

Если по "check" вы имеете в виду, что браузеры просмотра "ссылка" отображаются в нижней строке состояния, тогда вы правы. Этого недостаточно, чтобы проверить, действительно ли ссылка идет там, где она утверждает, что собирается идти. Например, запуск jquery script ниже на странице приведет к тому, что вся ссылка будет переведена на google.com независимо от того, какова действительная целевая ссылка href для ссылки:

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

Ответ 3

Нельзя ли использовать фишинговые веб-сайты для этого?

Не совсем, потому что facebook - это то, от чего должен быть вызван указанный javascript. Пользователь должен сначала найти ненадежный источник, который бы вставлял javascript в тег.