Ответ
Да, уязвимость есть. Если ссылка с target="_blank" не содержит rel="noopener noreferrer", то новая вкладка может получить доступ к window.opener исходной страницы через JavaScript. Это позволяет злонамеренному сайту изменить URL исходной страницы или выполнить другие вредоносные действия.
Пример уязвимого кода:
<a href="https://malicious-site.com" target="_blank">Нажми меня</a>
Безопасная версия:
<a href="https://malicious-site.com" target="_blank" rel="noopener noreferrer">Безопасная ссылка</a>
noopener предотвращает доступ к window.opener, а noreferrer дополнительно скрывает реферер. В современных браузерах noopener добавляется автоматически, но лучше указывать явно для совместимости.
Ответ 18+ 🔞
А, ну это же классика, блядь! Одна из тех дыр, про которую все вроде как слышали, но половина всё равно кладет хуй.
Смотри, суть в чём. Берёшь обычную ссылку, которая открывается в новой вкладке. Всё вроде норм, пользователь кликнул, у него там какая-то хуйня открылась, он даже не парится.
<a href="https://zloi-sait-pidarasov.ru" target="_blank">Бесплатные стикеры ВК!</a>
А вот тут-то и начинается пиздец, ёпта. Новая вкладка, которую только что открыли, — она же не в вакууме висит. У неё через JavaScript есть доступ к объекту window.opener той вкладки, с которой её открыли. И эта новая вкладка — она может этим доступом воспользоваться, как хитрая жопа!
Что она может сделать? Да овердохуища! Самый простой трюк — подменить URL у твоей исходной страницы. Сидишь ты, значит, на «ВКонтакте», кликнул на левую ссылку, а тебе в фоне открывается новая вкладка, которая тут же меняет URL твоей вкладки с ВК на какую-нибудь хуйню вроде «поздравляем, вы выиграли айфон». Фишинг, одним словом. Или ещё хуже — может попытаться что-то сделать с твоей сессией. В общем, доверия к такой ссылке — ноль ебать.
И как с этим бороться? Да очень просто, блядь! Надо этой новой вкладке начисто отрезать руки, чтобы она не лезла в чужой window.opener. Для этого и придумали атрибут rel.
Вот так выглядит ссылка, которая не будет совать свой нос куда не просят:
<a href="https://normalniy-sait.ru" target="_blank" rel="noopener noreferrer">Нормальная ссылка</a>
Что здесь волшебного? noopener — это главный пацан. Он прямо говорит браузеру: «Слушай, братан, не давай этой новой вкладке доступ к window.opener, пусть сидит в своей песочнице и не выёбывается». А noreferrer — это такой дополнительный приблуд, который ещё и скрывает, откуда пришёл пользователь (HTTP-заголовок Referer). Два в одном, надёжно, как швейцарские часы, блядь.
Да, в последних версиях хромов и фаерфоксов noopener иногда добавляется автоматом, если указан target="_blank". Но надеяться на авось — это, извини, мудя. Лучше явно прописать, и спать спокойно. Чих-пых тебя в сраку, если забудешь!