Il mio analizzatore di codice statico contrassegna questo pezzo di Javascript sul sito Web del mio cliente come un potenziale XSS basato su DOM:
var x = $('#' + window.location.hash.substr(1))
x.addClass('highlighted').find('div').show();
Il codice è direttamente in $(function(){ ... }
, quindi deve essere eseguito ogni volta che viene caricata la pagina? (confessione: ne so troppo poco di jQuery ...)
Su Google, ho scoperto che jQuery ha reso più difficile l'utilizzo di codice come questo dopo questo articolo del 2011:
Ma gli attacchi sono ancora possibili, uno che funziona ancora è link .
Il mio cliente è ancora vulnerabile? Penso di sì, ma non riesco a inventare un exploit perché non conosco abbastanza bene jQuery per capire cosa sta succedendo.
Modifica - poiché il valore passato a $()
inizia sempre con #
Sospetto che questo blocchi qualsiasi exploit di questo, e provarlo sulla console di Firefox e Chrome sembra confermare questo - ma non sono ancora sicuro che non ci sia un altro modo:)