Ссылка с target = «_ blank» и rel = «noopener noreferrer» все еще уязвима?

95

Я вижу, как люди рекомендуют, чтобы каждый раз, когда кто-то использует target="_blank"ссылку, чтобы открыть ее в другом окне, они должны помещать rel="noopener noreferrer". Интересно, как это мешает мне, например, использовать Инструменты разработчика в Chrome и удалить атрибут rel. Затем щелкнув ссылку ...

Это простой способ сохранить уязвимость?

Миро Дж.
источник
Как вы думаете, какую защиту он предоставит (или не предоставит в данном случае)?
Я рассматривал расширения браузера, которые могут управлять DOM.
Miro J.
1
Firefox 79 сделает это автоматически (ну, noopenerпо крайней мере, но, как указано ниже, noreferrerизбыточен): hacks.mozilla.org/2020/07/firefox-79
Кев,

Ответы:

114

Вы можете неправильно понять уязвимость. Вы можете прочитать об этом здесь: https://www.jitbit.com/alexblog/256-targetblank---the-most-underestimated-vulnerability-ever/

По существу, добавление rel="noopener noreferrer"к ссылкам защищает пользователь вашего сайта против того , чтобы сайта вы связаны с потенциально угоном браузера (через изгой JS).

Вы спрашиваете об удалении этого атрибута с помощью инструментов разработчика - это потенциально может подвергнуть вас (человека, изменяющего атрибут) уязвимости.

Джон Улейс
источник
8
noopener noreferrerявляется избыточным, поскольку noreferrerвключает в себя функции noopener. html.spec.whatwg.org/multipage/links.html#link-type-noreferrer
mfluehr
1
если это избыточно, почему Visual Studio Code требует обоих?
muhe
57

Ссылки с target="_blank"на них уязвимы к тому, что страница реферера будет заменена в фоновом режиме, в то время как внимание пользователя отвлекается на вновь открытой вкладке. Это известно как обратная табуляция :

Пример вредоносного потока

Ссылающаяся страница хранится на window.opener, и вредоносный сайт может изменить это посредством:

if (window.opener) {
   window.opener.location = "https://phish.example.com";
}

Добавление rel="noopener noreferrer"исправляет эту уязвимость во всех основных браузерах.

Обратите внимание, что теоретически вы можете удалить rel клиентскую часть с помощью манипуляций ... но зачем вам это нужно? Все, что вы делаете, - это сознательно становитесь уязвимыми для атаки.

Другие пользователи, которые посещают тот же веб-сайт (и не изменяют свой собственный код на стороне клиента), по-прежнему будут в безопасности, поскольку сервер по-прежнему будет обслуживать файлы rel="noopener noreferrer". Ваше удаление относится только к вам.

Обсидиановый век
источник
3

Тег привязки rel=”noopener”или rel=”noreferrer”атрибуты улучшают безопасность веб-сайта, но некоторые люди хотят игнорировать их, потому что думают, что они повлияют на поисковую оптимизацию их веб-сайта, но это всего лишь миф. Он защищает конфиденциальность аудитории вашего веб-сайта и предотвращает распространение вредоносного кода с внешнего веб-сайта.

Ковсиган Атсаям
источник
5
Было бы неплохо, если бы вы могли процитировать какой-нибудь источник "мифического" утверждения. Особенно по noreferrerчасти.
Миро Дж.
0

Если консоль разработчика показывает предупреждение относительно noopener noreferrer, убедитесь, что вы добавили оба noopenerи noreferrerв rel. ссылка должна быть примерно такой:

<a href="www.google.com" target="_blank" rel="noopener noreferrer" />
Юврай Патил
источник