Rel=noopener
Atribut noopener
dokáže zabránit manipulaci ze stránky otevřené do nového okna.
HTML odkazy obsahující otevření do nového okna pomocí target="_blank"
s sebou nesou jisté bezpečnostní risiko.
Stránka, která byla do nového okna otevřena, může manipulovat s adresou stránky, která ji otevřela.
Po návratu z následující stránky otevřené do nového okna se to této stránky přidá #hash
do URL:
Vše zajistí jednoduchý JS kód:
opener.location = 'http://jecas.cz/noopener#hash';
Zneužití
Zneužít toto chování jde třeba pro phishing, kdy bude uživatel přesměrován na podvodnou stránkou za cílem získat hesla.
Využít změnu adresy se může hodit i pro zobrazení reklamy při kliknutí na odkaz.
Jen target=_blank
?
Problém se netýká jen odkazů otevíraných automaticky do nového okna díky atributu target
. Změna opener.location
se projeví i v případě, že si nové okno otevře uživatel sám.
Řešení
V podporovaných prohlížečích (Chrome 49+, Opera 36+) by mělo jít zakázat změnu adresy pomocí atributu rel
a hodnoty noopener
:
<a href="http://example.com" rel="noopener">
Test:
Podle mých testů ale blokování nefunguje ani v Chrome 50 a hash
se změní.
Komentáře