Link z target = „_ blank” i rel = „noopener noreferrer” nadal jest podatny na atak?


109

Widzę, że ludzie zalecają, aby za każdym razem, gdy użyje target="_blank"się linku do otwarcia go w innym oknie, umieść rel="noopener noreferrer". Zastanawiam się, jak to uniemożliwia mi używanie na przykład Narzędzi dla programistów w Chrome i usuwanie atrybutu rel. Następnie kliknij link ...

Czy to łatwy sposób na zachowanie tej luki?


Jak myślisz, jaki rodzaj ochrony zapewniłby (lub nie dałby w tym przypadku)?

Rozważałem rozszerzenia przeglądarki, które mogą manipulować DOM.
Miro J.

1
Firefox 79 zrobi to automatycznie (cóż, noopenerprzynajmniej, ale jak wskazano poniżej, noreferrerjest rendundant): hacks.mozilla.org/2020/07/firefox-79
Kev

Odpowiedzi:


126

Możesz źle zrozumieć tę lukę. Możesz przeczytać więcej na ten temat tutaj: https://www.jitbit.com/alexblog/256-targetblank---the-most-underestimated-vulnerability-ever/

Zasadniczo dodawanie rel="noopener noreferrer"do linków chroni użytkowników Twojej witryny przed posiadaniem witryny, z którą łączysz się, i potencjalnym przejęciem przeglądarki (przez fałszywy JS).

Pytasz o usunięcie tego atrybutu za pomocą Narzędzi dla programistów - to tylko potencjalnie naraziłoby Ciebie (osobę manipulującą atrybutem) na lukę.


9
noopener noreferrerjest zbędny, ponieważ noreferrerzawiera funkcjonalność noopener. html.spec.whatwg.org/multipage/links.html#link-type-noreferrer
mfluehr

1
jeśli jest nadmiarowy, dlaczego program Visual Studio Code wymaga obu?
muhe

66

Linki z target="_blank"na nich są narażone na zamianę strony odsyłającej w tle, podczas gdy uwaga użytkownika jest odwracana przez nowo otwartą kartę. Jest to znane jako odwrócone tabnapping :

Przykład złośliwego przepływu

Strona odsyłająca jest przechowywana w window.opener, a złośliwa witryna może to zmienić poprzez:

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

Dodanie rel="noopener noreferrer"naprawia tę lukę we wszystkich głównych przeglądarkach.

Zauważ, że teoretycznie możesz usunąć stronę rel klienta poprzez manipulację ... ale dlaczego miałbyś to robić? Wszystko, co robisz, to celowe narażanie się na atak.

Inni użytkownicy, którzy odwiedzają tę samą witrynę (i nie modyfikują własnego kodu po stronie klienta) nadal byliby bezpieczni, ponieważ serwer nadal obsługiwałby rozszerzenie rel="noopener noreferrer". Twoje usunięcie dotyczy tylko Ciebie.


po prostu wędruj, jaką korzyść z rel = "noopener noreferrer" daje mojej wewnętrznej aplikacji? Otwiera tę samą domenę wewnętrzną, w tej samej sieci wewnętrznej, jest 0 szans, że będzie odnosić się do jakiejś zewnętrznej strony. A jeśli nadal będzie to korzystne, dlaczego nie dodać go ogólnie do wszystkich linków?
Dainius,

3

Znacznik rel=”noopener”lub rel=”noreferrer”atrybuty kotwicy poprawiają bezpieczeństwo witryny, ale niektórzy ludzie chcą je zignorować, ponieważ sądzą, że wpłyną one na optymalizację ich witryny pod kątem wyszukiwarek, ale to tylko mit. Chroni poufność odbiorców Twojej witryny i zapobiega rozprzestrzenianiu się złośliwego kodu z witryn zewnętrznych.


8
Byłoby miło, gdybyś zacytował jakieś źródło stwierdzenia „mit”. Szczególnie jeśli chodzi o noreferrerczęść.
Miro J.

1

Odnośnie raportu z audytów Lighthouse Best Practices :

Dodaj rel="noopener"lub rel="noreferrer"do jakichkolwiek linków zewnętrznych, aby poprawić wydajność i zapobiec lukom w zabezpieczeniach.

Generalnie, kiedy używasz target="_blank", zawsze dodawaj rel="noopener"lub rel="noreferrer":

Na przykład:

<a href="https://www.kaiostech.com/store/" target="_blank" rel="noreferrer">
  KaiStore
</a>
  • rel="noopener"uniemożliwia nowej stronie dostęp do window.openerwłaściwości i zapewnia jej uruchomienie w osobnym procesie.
  • rel="noreferrer"ma ten sam efekt, ale także zapobiega Refererwysłaniu nagłówka do nowej strony.

Więcej informacji można znaleźć w oficjalnym dokumencie .


Czy możesz dodać oba?
pobłogosławiony

-1

Jeśli konsola programisty wyświetla ostrzeżenie dotyczące noopener noreferrer, upewnij się, że dodajesz oba elementy noopeneri noreferrerrel. link powinien wyglądać jak poniżej:

<a href="www.google.com" target="_blank" rel="noopener noreferrer" />

Wydaje się, że nie odnosi się to do zadanego pytania.
TylerH
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.