Недавно, работая над своим сайтом, я наткнулась на любопытную вещь когда использовала атрибут 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"/>
Подытоживая все вышесказанное, для ссылок с target="_blank", всегда следует добавлять rel="noopener noreferrer", как меру предосторожности против фишинга. Это гарантирует, что значение window.opener будет null, в Chrome и Firefox. В Safari Technology Preview 68, для target="_blank" задается rel="noopener" по умолчанию.
Спасибо, что прочитали мои мысли по этой теме.