Foros del Web » Programando para Internet » PHP »

eval problematico

Estas en el tema de eval problematico en el foro de PHP en Foros del Web. Hola Pues uso esto Código PHP:          eval( '$salida = "'  .  str_replace ( '"' ,  '\"' ,  $this -> fetch_templates ( $templat )) .  '";' );         echo  ...
  #1 (permalink)  
Antiguo 26/01/2011, 13:12
 
Fecha de Ingreso: enero-2011
Mensajes: 14
Antigüedad: 13 años, 3 meses
Puntos: 0
eval problematico

Hola

Pues uso esto
Código PHP:
        eval('$salida = "' str_replace('"''\"'$this->fetch_templates($templat)) . '";');
        echo 
$salida

$this->fetch_templates($templat) Devuelve perfectamente un javascript de la base de datos, el problema tambien es el javascript, que es este:

Código Javascript:
Ver original
  1. function actualizar(elemento,otro,algo,campo){
  2.     if(otro==0){
  3. document.getElementById(algo).innerHTML="<input type=text value=\""+elemento+"\" ondblclick=\"actualizar(this.value,'1','"+algo+"','"+campo+"')\"   />";

si se fijan tiene dentro los caracteres \", pero la funcion str_replace los sustituye por ", como le hago para evitar este problema?

Intente quitando la funcion str_replace(), pero la variable $salida me queda vacia, de esta manera

Código PHP:
Ver original
  1. eval('$salida = "' . $this->fetch_templates($templat) . '";');

o sera mejor hacer esto? y no usar eval, es que he leido que es mas vulnerable, sera cierto? o solo cuando se hacen llamar funciones usando eval

Código PHP:
Ver original
  1. echo $this->fetch_templates($templat);
Saludos y gracias de antemano

Última edición por MyPHP; 26/01/2011 a las 13:41
  #2 (permalink)  
Antiguo 26/01/2011, 15:17
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: eval problematico

Eval lo que hace es ejecutar un código php, y tu estás haciendo eval a un código javascript.

Si como imagino lo que quieres es "imprimir" (escribir) el código javascript, sólo debes hacer un echo.

El uso de eval es peligroso si ejecutas código que alguien más pueda crear (ya sea pasado por parámetros o bien extraido de una BD). Muchas personas opinan que el eval no debería usarse y es cierto que se debería evitar en lo posible, no obstante ante cosas demasiado complejas me he topado un par de veces con que es inevitable.
  #3 (permalink)  
Antiguo 26/01/2011, 15:58
 
Fecha de Ingreso: enero-2011
Mensajes: 14
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: eval problematico

Cita:
Iniciado por ocp001a Ver Mensaje
Eval lo que hace es ejecutar un código php, y tu estás haciendo eval a un código javascript.

Si como imagino lo que quieres es "imprimir" (escribir) el código javascript, sólo debes hacer un echo.

El uso de eval es peligroso si ejecutas código que alguien más pueda crear (ya sea pasado por parámetros o bien extraido de una BD). Muchas personas opinan que el eval no debería usarse y es cierto que se debería evitar en lo posible, no obstante ante cosas demasiado complejas me he topado un par de veces con que es inevitable.
Es que en el javascript uso variables, que defino en el script PHP, que yo sepa, podrias corregirme si me equivoco, pero creo eval, es la unica forma para obtener HTML, y ponerle variables, no?

Última edición por MyPHP; 26/01/2011 a las 16:34
  #4 (permalink)  
Antiguo 26/01/2011, 17:49
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: eval problematico

De ninguna manera, el simple echo de php construye el codigo javascript con los valores que tu pongas. eval en php ejecuta codigo php, también javascript cuenta con eval, el cual desde luego ejecuta javascript.

Si como me imagino con php lees la bd y escribes el contenido de una página, con el echo estás más que servido.

Ahora bien, si estás cargando el contenido de la bd y lo escribes dinámicamente y quieres ejecutar el javascript, lo que deberías hacer es regresar mediante alguna llamada ajax la funcion javascript. Si es este último caso, depende de si estás usando alguna ayuda de ajax (jquery, mootools , xajax) el cómo regresar dicha función.
  #5 (permalink)  
Antiguo 26/01/2011, 17:57
 
Fecha de Ingreso: enero-2011
Mensajes: 14
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: eval problematico

Cita:
Iniciado por ocp001a Ver Mensaje
De ninguna manera, el simple echo de php construye el codigo javascript con los valores que tu pongas. eval en php ejecuta codigo php, también javascript cuenta con eval, el cual desde luego ejecuta javascript.

Si como me imagino con php lees la bd y escribes el contenido de una página, con el echo estás más que servido.

Ahora bien, si estás cargando el contenido de la bd y lo escribes dinámicamente y quieres ejecutar el javascript, lo que deberías hacer es regresar mediante alguna llamada ajax la funcion javascript. Si es este último caso, depende de si estás usando alguna ayuda de ajax (jquery, mootools , xajax) el cómo regresar dicha función.
Es que en realidad necesito que me ayuden a resolver el problema que expuse en el primer post, en este caso, no puedo usar ajax, y tengo que usar eval, porque este eval, lo estoy usando para obtener HTML tambien de la Base de datos, y el HTML tiene variables

Solo necesito que me ayuden con la sintaxis correcta del EVAL, que les expongo en el primer post
  #6 (permalink)  
Antiguo 26/01/2011, 18:03
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: eval problematico

Pero es que no haz aclarado cómo estás usando o cómo quieres manejar el javascript.
Pero una cosa es segura, eval de php no hará nada con una expresión en lenguaje javascript, y bueno, finalmente a tu última pregunta, eval en php ejecutará codigo php correctamente formado, pero si ese codigo contiene comillas o signos de moneda, éstos habrá que "escaparlas", esto lo puedes hacer simplemente con addslashes.
  #7 (permalink)  
Antiguo 27/01/2011, 10:45
 
Fecha de Ingreso: enero-2011
Mensajes: 14
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: eval problematico

Estoy haciendo esto, que si me funciona, no se si pudiera evitar el eval, me podrias decir?
Código PHP:
Ver original
  1. $variable="algo";
  2. $ruta="miruta";
  3. $otravar="unavar";
  4.         eval('$salida = "' . addslashes($this->fetch_templates($templat)) . '";');
  5.         echo str_replace("\'", "'",$salida);

Y en el html o en el javascript guardado en la base datos es:

Código HTML:
Ver original
  1. <title>$variable</title>
  2. <script src="$ruta"></script>

En javascript a veces:
Código Javascript:
Ver original
  1. var algo=$otravarphp

Del modo que estoy haciendo las cosas efectivamente me permite hacer eso, pero habra alguna manera de poner variables php en el html, evitando usar el eval? en este caso

Saludos

Última edición por MyPHP; 27/01/2011 a las 11:17
  #8 (permalink)  
Antiguo 27/01/2011, 11:45
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: eval problematico

Ok, si dentro del código javascript tienes valores que deberían ser tomados de php si, necesitas el eval para que dichas variables tomen sus valores dentro de php, no obstante y sin conocer a fondo la aplicación que estás manejado me parece demasiado rebuscado y que debería tener otra solución.

Aún así la solución inmediata es que al ser código javascript con variables php hagas un echo, es decir algo como esto:

Código PHP:
Ver original
  1. $codigojs=$this->fetch_templates($templat);
  2. $codigojs=str_replace("$","\$",$codigojs);
  3. eval("echo \"$codigojs\"; ");
  #9 (permalink)  
Antiguo 27/01/2011, 12:06
 
Fecha de Ingreso: enero-2011
Mensajes: 14
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: eval problematico

Te agradesco tu ayuda, es que es un sistemita de templates, por eso parece dificil dejar de usar eval, hay alguna manera de hacer mas segura el eval?

Saludos

Etiquetas: eval
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:00.