Da OWASP Cheat Sheet AJAX Security :
Eval is evil, never use it. Needing to use eval usually indicates a problem in your design.
Comprendo che eval
di codice JS non attendibile può portare a un intero mondo di dolore, tuttavia non riesco a capire la categoricità della proibizione di OWASP.
Per come ho capito, è perfettamente possibile utilizzare eval
in modo sicuro, vale a dire quando il codice eval
'd è attendibile.
Sto sviluppando una app web per hobby (gioco) nel mio tempo libero (non ancora pubblicata). In questa app uso eval
. Anche se questa è una singola pagina, a volte mi sembra più semplice fare in modo che il server invii blocchi di codice HTML al browser invece di fare in modo che il browser costruisca la pagina da zero. Quindi questo è quello che sto facendo:
- Avere il browser avvia una XMLHttpRequest sul server per un frammento di pagina;
- Carica il codice HTML ricevuto (questo implica
innerHTML
, che incidentalmente è un'altra cosa che avverte OWASP agains ) - Poiché
innerHTML
non esegue il codice JS presente nel frammento assegnato, cerca il codice HTML caricato perscript
tag eeval
.
In questo modo viola chiaramente le linee guida di OWASP. Tuttavia non riesco a vedere come questo sia meno sicuro del normale caricamento di una pagina HTML / CSS / JS dal server senza AJAX, semplicemente digitando l'indirizzo della pagina nella barra degli indirizzi del browser. In entrambi i casi (caricando la pagina dalla barra degli indirizzi rispetto a innerHTML
'ing e - gasp! - eval
ing la risposta da una chiamata AJAX al server) c'è un'assunzione implicita di fiducia in questa pagina web. Se il server è compromesso e inizia a emettere un codice HTML / JS violento, tutti sono ugualmente fottuti anche se non viene utilizzato alcun% maligno% co_de. Altrimenti, tutti sono ugualmente al sicuro.
Tuttavia so che non essendo un esperto probabilmente ho una comprensione molto limitata e se OWASP vieta categoricamente qualcosa, probabilmente hanno buone ragioni per questo. Lascia che ti chieda allora, quali sono i rischi di fare ciò che ho descritto?