Estaba investigando un poco en el área XSS y encontré algo interesante en javascript:

eval(\`// alert(document.cookie)\`)

No hace nada como se esperaba, pero

 eval(\`// \r alert(document.cookie)\`)

Aparece una alerta con el token ... \r char elimina el comentario y comienza a ejecutar el script

Probado en IE11, Edge y Chrome, todos tienen el mismo comportamiento.

¿Es eso algo esperado? Consideraría eso como un problema ...

Saludos, Evgeny

1
Evgeny 11 dic. 2016 a las 12:38
No puedo reproducir el problema: jsbin.com/tetocaj/1/edit? js, consola, salida
 – 
Quentin
11 dic. 2016 a las 12:43
ASÍ que comiste comillas ... ¿pusiste código en ``?
 – 
Evgeny
11 dic. 2016 a las 12:44
No entiendo cómo es esta una pregunta. eval ejecutará cualquier JavaScript que se le pase. Nadie antepone // a los valores pasados ​​a eval, eso contradice el propósito de eval. ¿Cuál es el agujero de seguridad exacto que cree que ha encontrado?
 – 
Dai
11 dic. 2016 a las 13:01
Me confundí cuando esto funcionó ... eso no es lo que esperaría ... no hay caracteres de nueva línea, pero el código se ejecutó ... pero como Quentin dijo \ r considerado como una nueva línea en javascript, tiene sentido que funcione ...
 – 
Evgeny
11 dic. 2016 a las 13:28

1 respuesta

La mejor respuesta

Este es el comportamiento esperado.

Un \r es un retorno de carro. Comienza una nueva línea.

// es un comentario de línea, solo comenta la línea en la que está.


Este no es más un problema de seguridad que cualquier otra cosa sobre eval. Si lo usa, debe comprender qué entrada le está dando.

0
Quentin 11 dic. 2016 a las 12:59
Ok, parece solo un malentendido ... pensé que solo \ n se suponía que debía comenzar una nueva línea ... y \ r volver al principio de la línea ... gracias.
 – 
Evgeny
11 dic. 2016 a las 13:13
Puede leer aquí lo que JS considera como saltos de línea.
 – 
Bergi
11 dic. 2016 a las 14:55