PassFront
  1. PassFront
  2. База знаний
  3. DOM и браузер

Есть ли уязвимость связанная с 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

Другие вопросы раздела