Не так давно я обнаружил, что JavaScript позволяет изменить атрибут href тега <a> после того, как вы щелкните по нему. На первый взгляд это выглядит несерьезно, но будьте уверены, таким способом злоумышленник сможет получить данные пользователя.
Позвольте вам продемонстрировать: (Прим. пер.: Пример вы можете увидеть в оригинале статьи. Ссылка изначально ведет на PayPal, но после нажатия происходит редирект на другую страницу блога автора. )
Как вы убедились, вы не перешли на PayPal (кроме Opera, где, по-видимому это поведение исправлено). Так произошло потому что, после нажатия на ссылку был запущен код, который изменил атрибут href ссылки, и что удивительно — браузер отправляет по-новому адресу. Но так не должно происходить. Посетители сайта (пожалуй, самые технически подкованные их них) по подлинной ссылке будут предполагать куда они переходят, в данном случае, на сайт PayPal. В прошлом году PayPal в течении нескольких месяцев производил редирект с главной страницы (UK) на paypal-business.co.uk. По-моему мнению пользователи уже привыкли к таким перенаправлениям, что уже само по себе является уязвимостью и представляет реальную угрозу, как я её называю «Фишинг 2.0».
Взглянем на код:
// Несжатый
var links = document.links;
for(i in links) {
links[i].onclick = function(){
this.href = 'http://bit.ly/141nisR';
};
}
// Сжатый (было 100 символов; сейчас 67, исключая сссылку)
// Благодаря sgoel из HN
o=document.links;for(i in o){o[i].onclick=function(){this.href='//bit.ly/141nisR'}}
Это событие очень сложно обнаружить. Почти все, кто использует JavaScript/jQuery пользуются обработчиками события тега <a>, а не навешиванием атрибута «onclick» прямо на ссылку, что обнаружить намного сложней. К тому же, можно использовать обертку setTimeout для обхода любых способов обнаружить обработчик. Любой мало-мальски способный хакер может сделать компьютерный вирус или использовать встраиваемый JavaScript код для инъекции. Очень легко можно обновить JavaScript код (инъекцией, в частности), и я бы сказал что такие инструменты как McAfeeSecure и PhishTank не в состоянии противостоять «Фишингу 2.0»
Т.к. реальной пользы изменение атрибута ссылки по событию «onclick» не несёт, я предлагаю World Wide Web Consortium (W3C) и основным браузерам отключить данную возможность. Это невероятно простой недостаток, кому-то и вовсе такое поведение может показаться нормальным, но оно вероятнее всего может быть использовано во вред, а не на пользу. Я понимаю, Google и другие сайты могут использовать это поведение, но если мы хотим сделать интернет безопасным, мы не должны допустить существование такой, пусть и маленькой уязвимости.
UPD (19/3) — Появилась идея — предупреждать пользователей, что при нажатии по ссылке будет произведен переход на другой домен (+1 to abididea). Сайты, такие как Google and Facebook продолжат нормально функционировать, т.к. используют один домен, а это исключит возможность фишинга. В этом случае выиграют все (кроме фишеров, конечно же!). Мне нужна ваша помощь, чтобы основные браузеры приняли эту идею как можно быстрее. Давайте отнимем у злоумышленников один простой способ обманывать простых пользователей.
UPD (19/3) — Предложил исправление Firefox, жду ответа.
UPD (20/3) — Ходят слухи что Google Chrome выпустит исправление, но подтверждение этому не слышал.
(Это мой первый перевод, прошу не судить строго, %username%, с радостью приму в личку все замечания и постараюсь исправить.)
Автор: kriptomen