
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í.
Odkazy jinam
Související články
HTML odkazy
Všechny informace a detaily o HTML odkazech, jejich atributech a stylování pomocí CSS.
Zanořování nezanořitelných HTML značek
Jak funguje zanořování značek jako <p> nebo <button> v HTML parseru versus DOM metodách.
Jak zjistit návštěvnost cizího webu
Přehled metod a nástrojů, jak si udělat realistický obrázek o návštěvnosti konkurenčního webu.