Здравствуйте, дорогие оставшиеся в живых френды!
Федеральная Служба Опасности кажется возвращается в эфир после долгого перерыва. Не то что мы тут фигней страдали, но занимались работой, далекой от хакеров и взломов. А теперь вот вернулись.
В честь такого дела напишем об одном баге. Вернее не баге, а фиче, и даже не фиче, а натурально веб стандарте, на который почему-то до недавних пор не очень обращали внимания.
Вот если например взять любую ссылку и открыть ее в новом окне, то новой странице передастся refer(r)er. Оказывается, и это и есть та самая фича, передастся еще и объект window.opener указывающий на предыдущую страницу. Делать с объектом особенно ничего нельзя, поскольку живет он на другом сайте, кроме одного: можно перенаправлять на другой адрес. Вот так:
if (window.opener) {
window.opener.location = '
http://some.other.site/';
}
Какого хрена эту возможность вставили, я не знаю, хороших применений я тут придумать не могу. А негативное пожалста: берешь сайт типа ЖЖ, Эвернота или веб-почты, желательно с часто слетающей авторизацией, постишь туда ссылку на свой злой сайт. На злом сайте какие-нить котики для отвлечения внимания, и джаваскрипт, перенаправляющий исходный сайт на фейковую страницу авторизации. Посмотрит пользователь котиков, вернется домой, поцокает языком да и, глядишь, попробует назад залогиниться...
Простая демонстрация. Вместо фейкового логина идет на логин lj.rossia.org
Интересный момент - если фейковая страница не устанавливает титул, то старый титул остается на месте, то есть визуально вообще ничего не прыгает и пользователя не пугает
Как бороться. Тут авторы браузеров еще не пришли к общему знаменателю. Обсуждение идет, добавление rel="noreferrer" в код пользовательских ссылок вроде стирает opener на всех браузерах.
Бонус: Referer тогда тоже не передается, как следует из названия. Иногда можно пользоваться rel="nofollow"(вы думали оно нужно только для оптимизации поисковиков?) но только на вебките, на файрфоксе не работает.