Come accennato B-Con, l'autore dell'attacco non è quello seduto al computer, quindi potrebbe utilizzare lo eval()
già nel tuo script come mezzo per passare codice dannoso al tuo sito al fine di sfruttare la sessione dell'utente corrente in qualche modo (ad es. un utente che segue un collegamento dannoso).
Il pericolo di eval()
è quando viene eseguito su valori non autorizzati e può portare a una vulnerabilità DOM Based XSS.
ad es. considerare il seguente codice nel tuo HTML (piuttosto artificiosa, ma dimostra la questione spero)
<script>
eval('alert("Your query string was ' + unescape(document.location.search) + '");');
</script>
Ora, se la stringa di query è ?foo
si ottiene semplicemente una finestra di avviso che indica quanto segue: Your query string was ?foo
Ma cosa questo codice consentirà all'utente di eseguire il reindirizzamento degli utenti dal proprio sito a un URL come http://www.example.com/page.htm?hello%22);alert(document.cookie+%22
, dove www.example.com è il tuo sito web.
Questa modifica il codice che viene eseguito da eval()
a
alert("Your query string was hello");
alert(document.cookie+"");
(Nuove linee da me per chiarezza). Ora questo potrebbe fare qualcosa di più dannoso che mostrare il valore corrente del cookie, in quanto il codice richiesto viene semplicemente passato sulla stringa di query dal link dell'attaccante in forma codificata. Ad esempio, potrebbe inviare il cookie al dominio dell'utente malintenzionato in una richiesta di risorsa, consentendo il sequestro della sessione di autenticazione.
Si applica a qualsiasi valore da utente/input esterno non salvato ed eseguito direttamente nello eval()
, non solo nella stringa di query come mostrato qui.
Questo non è * "il consenso comune" *. Molti sviluppatori esperti sono infastiditi dal FUD riguardo a "eval". La * "eval è malvagia" * probabilmente non viene mai detta oggi da esperti programmatori. Se sei stupido, potrebbe essere pericoloso. Ma di solito è solo lento, brutto e porta a un codice difficile da evolvere. –
Ora, non vedo come questa domanda possa ricevere una buona risposta ... –