Ho 3 domini: domainA domainB domainC
Se imposto target="_blank"
su domainA
con un link a domainC
, domainC
può accedere a un gruppo di proprietà di domainA
. Ecco perché uso target="_blank" rel="noopener noreferrer"
.
Altrimenti, sono possibili cose come phishing più semplici. Considera il seguente codice su domainC
:
if(window.opener){
window.opener.location="http://phishing.com"
}
Se domainA
contiene un link come <a href="https://domainC.com" target="_blank">
, la condizione attiverà e reindirizzerà domainA
nel dominio controllato da un utente malintenzionato. Altre proprietà, come window.opener.length
sono leggibili.
Anche se in realtà non è una vulnerabilità perché definita dal W3C, è sconosciuta dalla maggior parte degli sviluppatori.
Ora, voglio includere un iframe da domainB
in domainA
, di cui mi fido, ma che non è protetto contro la vulnerabilità target="_blank"
.
Ho testato e fatto clic su un link sul mio iframe e sembra che window.opener
non sia null
come sarebbe con noopener noreferrer
, ma non è possibile accedere all'attributo né ai metodi di esso. Quando lo fa (ad esempio: reindirizzamento), stampa:
Unsafe JavaScript attempt to initiate navigation for frame with URL
domainB
from frame with URLdomainC
. The frame attempting navigation is neither same-origin with the target, nor is it the target's parent or opener.
Quindi, possiamo considerare sicuro includere iframe senza protezione su target="_blank"
?