In sostanza, stai chiedendo se la creazione dell'oggetto tramite query con URL con parametri può essere sfruttata in modo tale da caricarla con un codice XSS. La risposta breve non è a meno che non pianifichi di utilizzare questo oggetto appena creato per qualcosa. Naturalmente la lunga risposta dipende da cosa si intende fare con questo oggetto appena creato, si stanno disinfettando le sue proprietà e le chiamate di funzione, e se realizzi che il tuo codice non ha nulla a che fare con la mitigazione degli attacchi di tipo XSS, e che consente effettivamente a un potenziale sfruttatore di caricare qualsiasi oggetto a cui si potrebbe fare in seguito riferimento con payload e chiamate di funzione malevoli. In sostanza, il tuo codice non fa altro che dividere la query con URL con parametri dopo #
in una struttura di oggetto:
questo URL:
mywebsite.com#method1=document.location.href%3D%22do.not.ever.open.me%22
in questo oggetto:
var myObject = {
method1 : "document.location.href=\"do.not.ever.open.me\""
};
Questo oggetto è sicuro da usare? Se ancora non conosci la risposta, la mia risposta deve essere: no !
Spiegazione:
Dato che non hai incluso in che modo questi valori verranno utilizzati in seguito nel tuo codice, non possiamo davvero capire quanto siano sicuri da usare. Ma non dovresti considerarli più sicuri di una parte dell'URI non analizzata altrimenti è, e allo stesso tempo non fa nulla per il resto del tuo URL, fino alla parte #
di esso.
Manifestazione:
Per dimostrare, dov'è il problema, immagina questo scenario:
obj = new Object();
obj.something = parseparameters().method1;
eval(obj.something);
Quello che è successo è che il browser web ha caricato l'URI passato. Vai avanti, è sicuro provarlo tu stesso, come ho fatto in modo che carichi solo questa posizione come percorso relativo all'URL del documento aperto, risultando in% posizione dimywebsite.com/do.not.ever.open.me
richiesta. Cambiarlo in percorso completo, o addirittura cambiare qualcos'altro che caricare un nuovo URI, è comunque ancora banale e usare decodeURIComponent()
non cambia un po '.