Gli attacchi di Zalewski per la navigazione in entrata e in navigazione sono basati sulla navigazione senza sfocare la finestra; specialmente nel caso più fluido in cui l'operazione "indietro" attiva la bfcache, è improbabile che persino ottenga un evento onblur
o onfocus
!
Questi possono essere neutralizzati rilevando che la tua finestra è stata aperta da uno script. Questo può essere fatto controllando window.opener
; Vale anche la pena di cercare window.name
, dal momento che una finestra con nome può potenzialmente essere "trovata" da window.open
.
Questo in genere viene aggiunto a uno script per interruzione di frame, ad esempio:
if (top!==self || opener!==null || name!=='') {
// countermeasure
}
in cui la contromisura sarebbe qualcosa come nascondere / disattivare l'intero contenuto della pagina (non navigare in alto in quanto è davvero facile da fermare).
Come per i framebreaker in generale, ciò richiede JavaScript, quindi non funzionerà se è disabilitato e potrebbe potenzialmente essere attaccato tramite il filtro anti-XSS fasullo di IE (se non lo hai disabilitato con X-XSS-Protection
). Se sei un'applicazione che si basa su JS e non ha bisogno di accessibilità solo HTML, puoi negare per default qui per maggiore affidabilità.
Naturalmente, se lo fai, tu oi tuoi partner non possono aprire la tua pagina in un popup.
Ci sono altri attacchi simili che coinvolgono schede di chiusura o finestre a comparsa per far apparire il contenuto della pagina sotto il puntatore, ma sono meno agevoli degli attacchi della varietà di navigazione. In questi casi fai ottieni onfocus
/ onblur
ed è ragionevole reagire rendendo l'interfaccia inattiva per un periodo dopo un onfocus
se c'è una pagina di cui sei particolarmente preoccupato proteggere.
Una mitigazione generale per l'intera classe di vulnerabilità non consiste nel fare procedere operazioni pericolose da un singolo clic su una pagina che può essere navigata direttamente. Sembra debole, ma probabilmente troverai che lo stai già facendo naturalmente in molti casi per motivi non di sicurezza, ad esempio Elimina account - > "Sei sicuro di voler eliminare definitivamente il tuo account?".