2011-01-27 20 views
14

Eventuali duplicati:
Why exactly is eval evil?Perché eval non è sicuro in javascript?

leggo persone sostengono che eval non è sicuro quando viene eseguito su di codice arbitrario input dell'utente. Lo capisco in altri linguaggi che funzionano sul server che accede al filesystem, ecc. Tuttavia, perché questo è importante quando si esegue il codice in un browser? Dopotutto, non puoi semplicemente accendere Firebug e scrivere comunque uno script arbitrario che vuoi? Allora, come è eval qualsiasi diverso?

+1

'eval() 'può essere un vettore di attacco XSS, se non stai attento – PaoloVictor

+1

per favore spiegami un po 'di più –

+0

Vedi anche http://stackoverflow.com/questions/197769/when-is-javascripts-eval-not-evil e http://stackoverflow.com/questions/1826859/is-there-ever-a-good-reason-to-use-eval – Phrogz

risposta

19

Il pericolo di eval aumenta la sua brutta testa solo quando stai servendo una sceneggiatura scritta da alice a utente bob per il browser di bob per valutare.

ad es. se bob immette la sua password nella tua pagina, alice potrebbe aver scritto un keylogger nell'input dell'utente che è eval ed organizzare la codifica dei dati in uno script che bob (inconsapevolmente) invierà per essere servito ad Alice. Questo è, come ha suggerito @ Hunter2 nei commenti, un attacco XSS.

Se non servite ad altre persone, lei ha ragione nel ritenere che equivale a sparare fino Firebug

2

non credo che è pericoloso, per la maggior paranoico eseguire eval = null;

+4

Questo non aiuta. Posso ottenere la maggior parte dell'autorità di 'eval' facendo' new ((function() {}). Constructor) ('alert ("Untrusted code")')() '. Guarda Ma, niente globali! –

+0

che ha fatto sì che 'window' mi facesse impazzire, ma sono curioso: se dovessi sovrascrivere un riferimento ad un nativo attraverso' window', c'è un modo in cui puoi fare riferimento altrimenti? –

+4

'function myEval (str) {return (new Function (str))()}' è più semplice e funziona per me: D – tobyodavies

Problemi correlati