Найти тему
✨CodeWizard✨

target = "_blank" - сильно недооцененная уязвимость в безопасности

Оглавление
Перевод статьи: target="_blank" - the most underrated security vulnerability
Перевод статьи: target="_blank" - the most underrated security vulnerability

Недавно, работая над своим сайтом, я наткнулась на любопытную вещь когда использовала атрибут target="_blank" для ссылок.

Что в действительности происходит, когда вы открываете ссылку в новом окне, указав target="_blank"?

  • Страница, на которую мы ссылаемся, получает ограниченный доступ к текущей странице через объект window.opener
  • Недавно открытая страница теперь может изменить window.opener.location на любую фишинговую страницу. При таком сценарии использования пользователь доверяет странице на которую переходит с вашего сайта и будет относится к ней без подозрения.

Рассмотрим сценарий возможной атаки

Создайте поддельную "фишинговую" страницу с изображениями милых котиков, который всем понравятся, поделитесь ей на Facebook (который будет открывать вашу ссылку через _blank).

Создайте "фишинговый" сайт например по такому адресу https://phishingwebsite/facebook.com/page.html и разместите следующий код на вашей "фишинговой" странице.

Этот код перенаправит с Facebook на вашу фишинговую страницу, попросив пользователя повторно ввести свой пароль Facebook, и теперь пользователь находится на Facebook, а на этой поддельной веб-странице, похожей на Facebook. Эта фальшивая страница выглядит точно так же, как Facebook, и она просит войти, потому что вы по какой-то причине вышли из системы. Пользователь, не слишком задумываясь об этом, вводит свои учетные данные и отправляет форму.

Что же произошло?

Вы только что отправили свои личные учетные данные кому-то, кто теперь может войти в вашу учетную запись Facebook и делать в ней все что захочет, например, может изменить учетные данные.

Давайте посмотрим, как мы можем это исправить

Добавьте для ссылки атрибут rel с значением noopener.

<a href= '/share' rel="noopener" target="_blank"/>

Совсем старые браузеры, например такие как IE11, не поддерживают значение "noopener" и для них придется добавить еще одно значение для атрибута rel - "noreferrer"

<a href= '/share' rel="noopener noreferrer" target="_blank"/>

-2

Подытоживая все вышесказанное, для ссылок с target="_blank", всегда следует добавлять rel="noopener noreferrer", как меру предосторожности против фишинга. Это гарантирует, что значение window.opener будет null, в Chrome и Firefox. В Safari Technology Preview 68, для target="_blank" задается rel="noopener" по умолчанию.

Спасибо, что прочитали мои мысли по этой теме.