Есть ли уязвимость связанная с target="_blank"?
DOM и браузер
Да, `target="_blank"` без защиты создаёт уязвимость reverse tabnabbing: открытая страница получает доступ к `window.opener` и может подменить исходную вкладку на фишинговую. Защита — `rel="noopener noreferrer"`.
Уязвимость (reverse tabnabbing)
При target="_blank" открытая страница получает ссылку на исходную через window.opener. Вредоносная страница может:
// на открытой (вредоносной) странице
window.opener.location = 'https://phishing.com'; // подменит исходную вкладку!Пользователь возвращается на исходную вкладку, а там — фишинговая копия (например, поддельная форма входа).
Защита — rel="noopener noreferrer"
<a href="https://external.com" target="_blank" rel="noopener noreferrer">
Ссылка
</a>- noopener — обнуляет
window.openerу открытой страницы (она не сможет управлять исходной). Главная защита. - noreferrer — дополнительно не передаёт заголовок
Referer(скрывает, откуда пришли).
Современные браузеры
С недавних версий браузеры по умолчанию применяют noopener для target="_blank". Но явно указывать rel="noopener" — надёжная практика (старые браузеры, консистентность).
В React
Аналогично: <a target="_blank" rel="noopener noreferrer">. Линтеры (jsx-a11y) предупреждают об отсутствии.
Коротко для собеседования
Да: target="_blank" без защиты даёт reverse tabnabbing — открытая страница через window.opener может подменить исходную вкладку на фишинговую. Защита — rel="noopener noreferrer" (noopener обнуляет opener, noreferrer скрывает источник). Современные браузеры применяют noopener по умолчанию, но указывать явно — надёжнее.
Подробнее: MDN — rel=noopener