Сегодня мне понадобилось сделать так, чтобы после нажатия на ссылку её адрес менялся на другой, чтобы при повторном нажатии уже можно было перейти на него. И внезапно оказалось, что это работает не так, как я себе это представлял, и может служить прекрасной возможностью для спамеров, мошенников и прочих нехороших людей.
Изначально сама ссылка выглядела так
<a href="#mail">E-mail</a>
Клик на ссылку обрабатывался примерно таким кодом:
function email_clicked()
{
this.href = "mailto:me@example.com";
return true;
}
При попытке нажать на ссылку я обнаружил, что переход уже происходит по подмененному адресу. То есть я нажимаю на одну ссылку, а меня перекидывает на другую.
Это означает, что какой-нибудь нехороший человек может сделать ссылку, якобы ведущую на безопасный сайт, но при нажатии перекидывающую на сайт с рекламой или вируснёй. Погуглив на эту тему, узнал, что эта лазейка
известна ещё с 2009 года. (Чем-то это напоминает ситуацию с window.opener).
Вопрос: является ли это (с т.з. разработчиков браузеров) уязвимостью, багом, или же это "by design" и "так и должно быть, исправить нельзя"?