2011-01-27 25 views
14

Duplicar posible:
Why exactly is eval evil?¿Por qué eval es inseguro en javascript?

leí personas afirman que eval no es seguro cuando se ejecuta en código de entrada del usuario arbitrario. Entiendo esto en otros idiomas que se ejecutan en el servidor que accede al sistema de archivos, etc. Sin embargo, ¿por qué es esto importante cuando se ejecuta código en un navegador? Después de todo, ¿no puedes simplemente disparar Firebug y escribir cualquier script arbitrario que quieras de todos modos? Entonces, ¿cómo es la evaluación diferente?

+1

'eval() 'puede ser un vector de ataque XSS, si no tiene cuidado – PaoloVictor

+1

explique un poco más –

+0

Vea también http://stackoverflow.com/questions/197769/when-is-javascripts-eval-not-evil y http://stackoverflow.com/questions/1826859/is-there-ever-a-good-reason-to-use-eval – Phrogz

Respuesta

19

El peligro de eval solo asoma su horrible cabeza cuando está sirviendo un script escrito por alice to user bob para el navegador de bob para eval.

p. Ej. si bob ingresa su contraseña en su página, alice podría haber escrito un keylogger en la entrada del usuario eval ed y disponer que los datos sean codificados en una secuencia de comandos que bob (sin saberlo) enviará para ser servida a alice. Esto es, como @ Hunter2 ha sugerido en los comentarios, un ataque XSS.

Si no está sirviendo a otras personas, está en lo cierto al suponer que es equivalente a disparar hasta firebug

2

no creo que no es seguro, para los más paranoicos ejecutar eval = null;

+4

Esto no ayudará. Puedo obtener la mayor parte de la autoridad de 'eval' al hacer' new ((function() {}). Constructor) ('alert ("Uncusted code")')() '. ¡Mira mamá, no globos! –

+0

que hizo que 'window' me pusiera en ridículo, pero tengo curiosidad: si anulas una referencia a un nativo a través de' window', ¿hay alguna forma de que puedas referenciarlo de otra forma? –

+4

'function myEval (str) {return (new Function (str))()}' es más simple y funciona para mí: D – tobyodavies

Cuestiones relacionadas