Noopener vs noreferrer - Jak bezpiecznie używać target="_blank"?

Kazimierz Kozłowski 22 lutego 2026
Logo z dwoma połączonymi ogniwami i tekstem "Noreferrer Noopener".

Spis treści

Link otwierany w nowej karcie wygląda niewinnie, ale w HTML potrafi uruchomić mechanizm, który łączy bezpieczeństwo, prywatność i analitykę ruchu. W praktyce ten temat sprowadza się do wyboru między ochroną strony źródłowej a zachowaniem informacji o tym, skąd przyszedł użytkownik; zestaw noopener noreferrer rozwiązuje oba problemy, ale nie zawsze w tym samym stopniu. Poniżej pokazuję, co dokładnie robi każdy wariant, kiedy go używać i jak uniknąć błędów, które wciąż pojawiają się w prostych komponentach linków.

Co warto zapamiętać o bezpiecznych linkach otwieranych w nowej karcie

  • noopener odcina nową kartę od strony, która ją otworzyła, dzięki czemu ogranicza ryzyko podmiany widoku źródłowego.
  • noreferrer robi to samo, a dodatkowo nie wysyła nagłówka Referer, więc ukrywa źródło wejścia.
  • target="_blank" w nowoczesnych przeglądarkach zwykle daje efekt zbliżony do noopener, ale jawny zapis nadal porządkuje kod i ogranicza ryzyko w mniej aktualnych środowiskach.
  • Jeśli zależy Ci na analityce, afiliacji albo kampaniach, sam noreferrer może być zbyt agresywny.
  • To samo podejście warto stosować nie tylko w , ale też w linkach generowanych przez JavaScript oraz w wybranych przypadkach dla
    i .

Dlaczego bezpieczne otwieranie nowych kart ma znaczenie

Największy problem z linkami otwieranymi w nowej karcie nie leży w samym fakcie otwarcia nowego okna, tylko w tym, że nowa strona może próbować oddziaływać na stronę, z której przyszła. To właśnie fundament ataku typu reverse tabnabbing: użytkownik widzi zaufaną domenę, a potem oryginalna karta zostaje podmieniona na fałszywą stronę logowania lub inny wariant phishingu. OWASP wprost wskazuje, że taki scenariusz może wykorzystać link z target="_blank", jeśli nie zadbasz o odpowiednią ochronę.

W praktyce ryzyko rośnie wszędzie tam, gdzie link prowadzi do zewnętrznego serwisu, treści generowanej przez użytkownika albo strony, której nie kontrolujesz w pełni. To nie jest detal od „bardziej czystego HTML-a”, tylko realna decyzja o tym, czy nowa karta ma mieć dostęp do kontekstu Twojej strony. Kiedy patrzę na to redakcyjnie i technicznie jednocześnie, traktuję ten temat jak obowiązkowy element higieny kodu, a nie opcjonalny dodatek. Kiedy rozumiesz już zagrożenie, dużo łatwiej rozdzielić dwa atrybuty, które często wrzuca się do jednego worka.

Czym różni się noopener od noreferrer

Te dwa słowa bywają stawiane obok siebie, ale robią trochę inne rzeczy. noopener odcina dostęp do window.opener, czyli blokuje możliwość, by nowa karta manipulowała kartą źródłową. noreferrer robi to samo, a dodatkowo usuwa nagłówek Referer, więc serwis docelowy nie dostaje informacji o adresie strony, z której użytkownik kliknął link.

MDN podkreśla, że w nowoczesnych przeglądarkach target="_blank" zachowuje się tak, jakby noopener było ustawione domyślnie, ale to nadal nie mówi nic o refererze. Z kolei OWASP przypomina, że noreferrer automatycznie obejmuje też ochronę zapewnianą przez noopener. Właśnie dlatego wybór zależy od tego, czy bardziej zależy Ci na bezpieczeństwie, czy także na zachowaniu danych o źródle ruchu.

Wartość Co robi Co zostaje zachowane Kiedy ma sens
noopener Blokuje dostęp przez window.opener Referer nadal może zostać wysłany Gdy chcesz bezpieczeństwa bez utraty informacji analitycznych
noreferrer Blokuje window.opener i ukrywa źródło wejścia Nie ma nagłówka Referer Gdy prywatność i brak śladu źródłowego są ważniejsze niż analityka
Obie wartości razem Łączy ochronę kontekstu z ukryciem referera Brak Referer Gdy chcesz prostego, bezpiecznego standardu dla linków zewnętrznych

To rozróżnienie jest ważniejsze, niż wygląda na pierwszy rzut oka. Jeśli raz to sobie uporządkujesz, łatwiej będziesz pisać poprawny HTML bez zgadywania przy każdym linku.

Jak pisać poprawne linki w HTML

Najbardziej praktyczny wzorzec jest prosty: jeśli link otwiera się w nowej karcie i prowadzi poza Twoją stronę, dopisz odpowiedni rel od razu przy elemencie . Dzięki temu kod jest czytelny, intencja jasna, a komponent nie opiera się na domyślnych zachowaniach przeglądarki. Dla typowego linku zewnętrznego bez potrzeby zachowania referera zapis wygląda tak:


  Przeczytaj artykuł

Jeśli zależy Ci na bezpieczeństwie, ale jednocześnie chcesz zachować dane o źródle ruchu, użyj samego noopener:


  Przeczytaj artykuł

Ten sam schemat warto pamiętać także dla

i , bo MDN obejmuje nimi tę samą logikę relacji. W praktyce najważniejsza zasada brzmi: nie traktuj nowej karty jako decyzji wyłącznie UX-owej. To jednocześnie decyzja o bezpieczeństwie i o tym, czy chcesz zostawić ślad referera. Kiedy zapisujesz link w komponencie lub w CMS-ie, najlepiej wymuszać ten wzorzec automatycznie, zamiast liczyć na to, że ktoś będzie o nim pamiętał przy każdym wpisie.

Najczęstsze błędy, które widzę w projektach

Najczęściej problem nie polega na tym, że ktoś w ogóle nie zna tych atrybutów, tylko na tym, że używa ich wybiórczo albo zbyt mechanicznie. Poniżej są błędy, które pojawiają się szczególnie często:

  • Dodawanie target="_blank" do każdego linku, także wewnętrznego, bez zastanowienia, czy nowa karta naprawdę jest potrzebna.
  • Zakładanie, że nowoczesne przeglądarki załatwiają wszystko za Ciebie i nie trzeba już pisać jawnego rel.
  • Używanie noreferrer w miejscach, gdzie zależy Ci na atrybucji ruchu, kampaniach lub analizie źródeł wejścia.
  • Zapominanie o linkach tworzonych w JavaScript, gdzie problem może pojawić się przy window.open(), a nie tylko przy klasycznym .
  • Brak spójnego standardu w komponentach, przez co jeden moduł generuje bezpieczny link, a drugi już nie.

W projektach z treściami od użytkowników największy sens ma automatyzacja. Jeśli redaktor albo użytkownik końcowy może wstawiać odnośniki samodzielnie, to lepiej zabezpieczyć je na etapie renderowania albo sanitizacji niż liczyć na ręczną dyscyplinę. Z punktu widzenia utrzymania to zwykle szybsze i mniej podatne na przypadkowe pomyłki. Mając ten zestaw pułapek na uwadze, łatwiej przejść do prostego standardu, który można wdrożyć bez dyskusji w zespole.

Mój praktyczny standard dla linków wychodzących

Gdybym miał ułożyć jedną regułę do większości projektów, brzmiałaby ona tak: link zewnętrzny w nowej karcie dostaje przynajmniej noopener, a jeśli nie potrzebuję referera, dokładam też noreferrer. To podejście jest bezpieczne, przewidywalne i łatwe do utrzymania w komponentach.

  • Link do obcej domeny, bez znaczenia analitycznego: użyj obu wartości.
  • Link do zaufanego partnera, gdzie chcesz zachować źródło ruchu: zostaw samo noopener.
  • Link wewnętrzny otwierany w nowej karcie: najpierw zadaj sobie pytanie, czy to w ogóle ma sens UX-owo.
  • Link generowany dynamicznie w JavaScript: potraktuj go tak samo ostrożnie jak klasyczny odnośnik HTML.

Jeśli mam zostawić jedną praktyczną myśl, to taką: nowa karta ma być wygodą dla użytkownika, a nie sposobem na rozmycie odpowiedzialności za bezpieczeństwo. Dobrze ustawiony rel zajmuje sekundę, a potrafi oszczędzić problemów, których nie widać aż do momentu, kiedy ktoś naprawdę spróbuje wykorzystać lukę.

FAQ - Najczęstsze pytania

Noopener blokuje dostęp nowej karty do obiektu window.opener, chroniąc przed atakami typu reverse tabnabbing. Noreferrer zapewnia tę samą ochronę, ale dodatkowo ukrywa nagłówek Referer, przez co strona docelowa nie widzi źródła wejścia.

Większość nowoczesnych przeglądarek domyślnie stosuje noopener dla linków otwieranych w nowej karcie. Mimo to warto dodawać ten atrybut jawnie, aby zapewnić bezpieczeństwo w starszych środowiskach i zachować pełną czytelność standardów w kodzie.

Użycie noreferrer sprawia, że w narzędziach analitycznych ruch z takiego linku będzie widoczny jako wejście bezpośrednie (Direct) zamiast odesłania (Referral). Może to utrudnić analizę źródeł ruchu oraz rozliczanie kampanii afiliacyjnych.

Zestaw rel="noopener noreferrer" warto stosować dla większości linków zewnętrznych prowadzących do nieznanych lub niezaufanych witryn. Łączy on ochronę przed przejęciem karty źródłowej z maksymalną prywatnością użytkownika.

Oceń artykuł

Ocena: 0.00 Liczba głosów: 0

Tagi

noopener noreferrer
noopener vs noreferrer różnice
jak bezpiecznie używać target blank
kiedy stosować rel noreferrer
Autor Kazimierz Kozłowski
Kazimierz Kozłowski
Nazywam się Kazimierz Kozłowski i od ponad 10 lat zajmuję się analizą nowoczesnych technologii, programowaniem oraz sztuczną inteligencją. Moje doświadczenie obejmuje zarówno badania rynkowe, jak i tworzenie treści, które mają na celu przybliżenie skomplikowanych zagadnień w sposób przystępny dla szerokiego grona czytelników. Specjalizuję się w analizie trendów technologicznych oraz w ocenie wpływu innowacji na różne branże. Przez lata pracy w tej dziedzinie rozwijałem umiejętność obiektywnego podejścia do tematu, co pozwala mi na rzetelne przedstawianie faktów i danych. Moim celem jest dostarczanie aktualnych i wiarygodnych informacji, które pomagają czytelnikom zrozumieć zmiany zachodzące w świecie technologii. Wierzę, że wiedza powinna być dostępna dla każdego, dlatego staram się, aby moje teksty były nie tylko informacyjne, ale również inspirujące.

Udostępnij artykuł

Napisz komentarz