Foro de elhacker.net

Programación => 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
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
  1. $resultado = $formula;
Porque resultado también contendría la formula.
Pero si puedes hacer esto :
Código
  1. eval("$resultado = ".$formula);
  2.  
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
  1. implode(',',
  2.    array_map(create_function('$e', 'return \'"\'.$e.\'"\';'), array_values($attr_value))));
  3.  
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
@HardieVon
Código
  1. implode(',',
  2.    array_map(create_function('$e', 'return \'"\'.$e.\'"\';'), array_values($attr_value))));
  3.  
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