Посилання з target = “_ blank” та rel = “noopener noreferrer” все ще вразливе?


96

Я бачу, як люди рекомендують, щоб кожен раз, коли хтось використовує target="_blank"посилання, щоб відкрити його в іншому вікні, вони повинні помістити rel="noopener noreferrer". Цікаво, як це заважає мені використовувати Інструменти розробника в Chrome, наприклад, і видаляти атрибут rel. Потім клацніть на посилання ...

Це простий спосіб зберегти вразливість?


Як ви вважаєте, який захист він би надав (чи не надав, у цьому випадку)?

Я розглядав розширення браузера, які можуть маніпулювати DOM.
Miro J.

1
Firefox 79 зробить це автоматично ( noopenerпринаймні, принаймні, але, як зазначено нижче, noreferrerнадлишковий): hacks.mozilla.org/2020/07/firefox-79
Кев

Відповіді:


116

Можливо, ви невірно розумієте вразливість. Детальніше про це ви можете прочитати тут: 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боку.
Miro J.

0

Якщо на консолі розробника відображається попередження щодо noopener noreferrer, обов’язково додайте і те, noopenerі інше noreferrer. посилання має бути приблизно таким, як показано нижче:

<a href="www.google.com" target="_blank" rel="noopener noreferrer" />
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.