Взлом тега <a>
в 100 символов
Совсем недавно я обнаружил, что JavaScript позволяет изменять атрибут href
тега <a>
после того, как вы по нему кликнете. Это, на первый взгляд, может
показаться мелочью, но можете быть уверены, это позволит мошенникам обмануть
пользователей и получить их личные данные.
Давайте я покажу вам пример. Эта ссылка должна привести вас на PayPal.
Кликните по ней и увидите, что ссылка не ведет на PayPal (кроме Opera,
где это, похоже, исправлено). Это происходит потому, что когда
вы кликнули по ссылке, я запустил код, который изменил атрибут href
, и
браузер неожиданно повёл вас по новой ссылке. Такого быть не должно.
Посетители сайта (возможно, весьма технически грамотные люди) могут и будут
считать, что попали на тот сайт, где оказались, благодаря обычному редиректу,
в данном случае, с сайта PayPal. В прошлом году PayPal на протяжении
нескольких месяцев перенаправлял пользователей с главной страницы их
британского сайта на paypal-business.co.uk. Думаю, посетители сайтов
привыкли к редиректам, и если использовать такое поведение браузеров, оно
может представлять собой реальную угрозу Фишинга 2.0, как я его назвал.
Давайте взглянем на JavaScript:
// Код без сжатия
var links = document.links;
for(i in links) {
links[i].onclick = function(){ this.href = 'demo.html'; };
}
// Сжатый код (было 100 символов; сейчас осталось 67, не считая ссылки)
// Спасибо sgoel из HN
o=document.links;for(i in o){o[i].onclick=function(){this.href='demo.html'}}
Этот приём сложно отследить. Практически все, кто используют
JavaScript/jQuery, могут повесить обработчик на тег <a>
, а это уже не
исправить простым удалением атрибута onclick
. А еще можно обернуть код в
setTimeout
и обойти любое решение этой проблемы. Любой более-менее
приличный хакер может создать вирус или встраиваемый JavaScript, который
сможет внедрить вышеуказанный код на сайт. Поскольку обновлять JavaScript
(особенно встраиваемый) невероятно просто, думаю, что такие инструменты, как
McAfeeSecure и PhishTank не продержатся против волны фишинга и секунды.
Поскольку возможность обновлять ссылку после клика по ней не приносит
реальной пользы, я прошу консорциум W3C и вендоров
лидирующих браузеров отключить возможность изменения атрибута href
после
срабатывания события onclick
. Это простая ошибка интерпретатора, и,
несмотря на то, что такое поведение кажется кому-то нормальным, его можно
использовать в дурных целях. Я осознаю, что Google и ему подобные используют
эту особенность поведения браузеров, но если мы стремимся сделать cеть безопаснее,
то не можем позволить подобным ошибкам существовать. Есть альтернативные решения
(например, использование подлинных ссылок, без маскировки), и возможности
заменять после клика быть не должно. Она не стоит того, чтобы пользователи
становились жертвами мошенничества и воровства.
Обновление (от 19.03.2013) — моя новая просьба состоит в предупреждении пользователей о том, что адрес ссылки изменяется на другой домен после клика (+1 abididea). Такие сайты как Google и Facebook могут продолжать нормально работать в рамках одного и того же домена, Интернет в безопасности, а возможность фишинга устранена. Все остаются в выигрыше (кроме фишеров, конечно!). Мне нужна ваша помощь, чтобы убедить вендоров основных браузеров как можно скорее исправить ситуацию. Давайте лишим мошенников ещё одного способа обманывать пользователей.
Обновление (от 19.03.2013) — Я предложил патч для Firefox, жду ответа.
Обновление (от 20.03.2013) — Ходят слухи, что в Google Chrome дыру закроют, но я еще не получил подтверждения.