Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => PHP => Mensaje iniciado por: braulio-- en 25 Junio 2009, 23:54 PM

Título: [?]Para que sirve eval()?
Publicado por: braulio-- en 25 Junio 2009, 23:54 PM
Pues esa es mi duda, mas que util la verdad es que me parece una vulnerabilidad para un programador descuidado.
Porque ejecutar una sentencia desde eval y no desde el código normal?
Gracias
Título: Re: [?]Para que sirve eval()?
Publicado por: Azielito en 26 Junio 2009, 00:04 AM
por que con eval() podes generar codigo PHP dinamicamente :D

generacion de arrays, funciones, cosas mas dinamicas que dinamicas :xD

Le metes un filtro para que solo pasen cosas locales, o sea, nunca recuperar variables ingresadas por el usuario, o evitarlo lo mas que puedas :D
Título: Re: [?]Para que sirve eval()?
Publicado por: Anibal784 en 26 Junio 2009, 03:23 AM
eval() es la piedra fundamental de cualquier lenguaje interpretado, todo lo que hace un lenguaje interpretado es llamar a eval(), lisp hace eval(), python hace eval(), ruby hace eval(), perl hace eval() y PHP hace eval(), lee la línea y se la pasa a eval.

No hace mucho, recuerdo haber leído fundamentos de la programación en perl, en la cual hacían un requiere con la función eval, los pasos eran más o menos los siguiente:
tomaban el archivo con código perl
lo abrían
se lo pasaban a eval()
y ya tenía disponible todas las funciones de ese módulo, PHP nace de perl y por lo tanto no dudo que require/include no hagan más o meno eso, y sin eval no existiría ni include ni require, o sea, sería aún más chicloso el código PHP.
Título: Re: [?]Para que sirve eval()?
Publicado por: HardieVon en 26 Junio 2009, 05:14 AM
Cita de: Anibal784 en 26 Junio 2009, 03:23 AM
eval() es la piedra fundamental de cualquier lenguaje interpretado, todo lo que hace un lenguaje interpretado es llamar a eval(), lisp hace eval(), python hace eval(), ruby hace eval(), perl hace eval() y PHP hace eval(), lee la línea y se la pasa a eval.

No hace mucho, recuerdo haber leído fundamentos de la programación en perl, en la cual hacían un requiere con la función eval, los pasos eran más o menos los siguiente:
tomaban el archivo con código perl
lo abrían
se lo pasaban a eval()
y ya tenía disponible todas las funciones de ese módulo, PHP nace de perl y por lo tanto no dudo que require/include no hagan más o meno eso, y sin eval no existiría ni include ni require, o sea, sería aún más chicloso el código PHP.

man y tienes algun ejemplo en php que el eval sea impresindible?

por que yo eh hecho sistemas muy robustos y la verdad no eh ocupado mucho el eval, lo eh sabido suplementar.

algun ejemplo que no sea de criptologia
Título: Re: [?]Para que sirve eval()?
Publicado por: ^Cloud^ en 26 Junio 2009, 11:13 AM
Que yo sepa eval evalua una cadena y si en ella encuentra código ejecutable (en este caso PHP) lo ejecuta.

Es muy últil para hacer cosas como templates (minis... y normalmente se realiza en el buffer de salida de php) o tener formularios donde incluir código php en textareas... por ejemplo.


Un saludo,


Título: Re: [?]Para que sirve eval()?
Publicado por: braulio-- en 26 Junio 2009, 12:52 PM
He leído una situación útil.
Imagina que has sacado una fórmula matemática de una base de datos y la has guardado en la variable $formula.
Para obtener el resultado no podrías hacer
Código (php) [Seleccionar]

$resultado = $formula;

Porque resultado también contendría la formula.
Pero si puedes hacer esto :
Código (php) [Seleccionar]

eval("$resultado = ".$formula);

Y se tomaría $formula como una expresión matemática y no como una string.
Gracias por responder
Título: Re: [?]Para que sirve eval()?
Publicado por: Anibal784 en 26 Junio 2009, 15:06 PM
@HardieVon
Código (php) [Seleccionar]

implode(',',
    array_map(create_function('$e', 'return \'"\'.$e.\'"\';'), array_values($attr_value))));

que tu no lo hayas usado no quiere decir que no exista y que no tenga utilidad, no se como estará implementada create_function, pero de lo que estoy seguro es que hace uso de la función eval().

Míralo como asm y C, en C puedes usar asm cuando quieras, sin embargo existen muchos sistemas y muy robustos que no tienen una línea de asm.
Título: Re: [?]Para que sirve eval()?
Publicado por: HardieVon en 27 Junio 2009, 03:13 AM
Cita de: Anibal784 en 26 Junio 2009, 15:06 PM
@HardieVon
Código (php) [Seleccionar]

implode(',',
   array_map(create_function('$e', 'return \'"\'.$e.\'"\';'), array_values($attr_value))));

que tu no lo hayas usado no quiere decir que no exista y que no tenga utilidad, no se como estará implementada create_function, pero de lo que estoy seguro es que hace uso de la función eval().

Míralo como asm y C, en C puedes usar asm cuando quieras, sin embargo existen muchos sistemas y muy robustos que no tienen una línea de asm.
Fijate lo que dices men por que todo lo que escribiste es mentira, citame donde puse que no lo eh usado y donde dije que no existe?.

braulio - es  muy bueno tu ejemplo. ;)

PD: me apendeje.
ando estresado, ni mas ni menos ;)

que por cierto aqui en este post. demuestro un excelente uso.

http://foro.elhacker.net/php/iquestcomo_hago_include_a_una_web_externa-t259360.0.html