Foros del Web » Programando para Internet » PHP »

[Duda] Almacenar código php

Estas en el tema de [Duda] Almacenar código php en el foro de PHP en Foros del Web. Hola, llevo 2 días estrujándome el cerebro para tratar de almacenar códigos php en alguna parte. Estoy desarrollando un sitio web, donde los usuarios pueden ...
  #1 (permalink)  
Antiguo 24/04/2013, 08:17
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 786
Antigüedad: 15 años, 10 meses
Puntos: 9
[Duda] Almacenar código php

Hola, llevo 2 días estrujándome el cerebro para tratar de almacenar códigos php en alguna parte.

Estoy desarrollando un sitio web, donde los usuarios pueden crear nuevas aplicaciones. Esas aplicaciones se almacenan en la base de datos, pero para mostrar las funciones, el html y demás de cada aplicación ahora mismo creo un archivo php para cada aplicación:

Por ejemplo, si yo creo una nueva aplicación que en la db tiene la id "1", hago un include de "/aplicaciones/app.1.php". Y no creo que sea muy bueno crear un archivo php para cada aplicación, por eso quería almacenarlo en una columna en la db, pero el problema luego es que no se puede imprimir ni con la función eval, ya que también contiene html.

¿Alguna sugerencia posible?
  #2 (permalink)  
Antiguo 24/04/2013, 09:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: [Duda] Almacenar código php

Aunque tenga HTML, usando eval se puede usar perfectamente:
Código PHP:
Ver original
  1. $codigo = '<?php $myvar=\'hola\'; ?><h1><?php echo $myvar; ?></h1>';
  2. eval($codigo);

Ahora ten en cuenta que eval() es muy inseguro ya que ejecuta TODO por lo que vas a tener que controlar muy bien y filtrar muy bien que cosas pueden meter en las aplicaciones.

Saludos.
  #3 (permalink)  
Antiguo 24/04/2013, 10:54
 
Fecha de Ingreso: abril-2013
Mensajes: 32
Antigüedad: 11 años, 7 meses
Puntos: 5
Respuesta: [Duda] Almacenar código php

Si vas a permitir que el usuario ingrese su propio codigo bajo ningun punto de vista utilizaria eval() siendo que le estas permitiendo ejecutar cualquier tipo de funcion con codigo malicioso.

De alguna forma tenes que filtrar ese codigo antes de ejecutarlo. Por otra parte aprovecho para presentarme, este es mi primer mensaje :P
  #4 (permalink)  
Antiguo 24/04/2013, 12:16
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 786
Antigüedad: 15 años, 10 meses
Puntos: 9
Respuesta: [Duda] Almacenar código php

Ya he intentado lo que me pasaste GatorV, pero por alguna razón que desconozco me devuelve error:

<?php eval($data['app_content']); ?>



Y en la columna de la db lo tengo así:

<?php $myvar='hola'; ?>

<h1><?php echo $myvar; ?></h1>

Parse error: syntax error, unexpected '<' in #:eval()'d code on line 1

Incluso haciendo solo lo que tu has pasado:

Código PHP:
Ver original
  1. <?php
  2. $codigo = '<?php $myvar=\'hola\'; ?><h1><?php echo $myvar; ?></h1>';
  3. eval($codigo);
  4. ?>


Parse error: syntax error, unexpected '<' in www\index.php(3) : eval()'d code on line 1

Última edición por SeaPirates; 24/04/2013 a las 12:22
  #5 (permalink)  
Antiguo 24/04/2013, 12:23
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: [Duda] Almacenar código php

Lee el manual de eval() para que entiendas como debes pasar el código a ejecutar, que aunque no se recomienda puede ser útil.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 24/04/2013, 13:43
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 786
Antigüedad: 15 años, 10 meses
Puntos: 9
Respuesta: [Duda] Almacenar código php

Ya lo tengo claro.

Por otro lado, ¿habría algún modo de ejecutar solo funciones php que yo programe?

Eso es lo que ya me comentasteis, que pueden ejecutar cualquier código..

Última edición por SeaPirates; 24/04/2013 a las 14:34
  #7 (permalink)  
Antiguo 24/04/2013, 15:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: [Duda] Almacenar código php

Pues tendrías que parsear el código antes de pasarlo por eval() y ver que funciones tiene pero es complicado y de todos modos es un agujero de seguridad porque hay formas de saltarlo, en fin depende de ti, realmente es la opción más limpia si no quieres usar archivos, aunque te va a pasar lo mismo con archivos, si lo dejas abierto te pueden ejecutar lo que quieras...
  #8 (permalink)  
Antiguo 24/04/2013, 19:12
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 786
Antigüedad: 15 años, 10 meses
Puntos: 9
Respuesta: [Duda] Almacenar código php

De todos modos, si solo soy el único que tiene acceso a realizar esas modificaciones, creo que no habría problema ¿No?
  #9 (permalink)  
Antiguo 24/04/2013, 19:23
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: [Duda] Almacenar código php

Cita:
Iniciado por SeaPirates Ver Mensaje
De todos modos, si solo soy el único que tiene acceso a realizar esas modificaciones, creo que no habría problema ¿No?
De hecho si, si por algún motivo ejecutas código que haga un bucle indefinido puede que se te cuelgue tu aplicación, etc.

Es torpe pensar que porque uno es usuario exclusivo de su propio software no va a incurrir en errores, el error más común es pensar que el error más común jamás sucederá.

Como dicen en inglés "don't shoot on your own foot, please".
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 24/04/2013, 19:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: [Duda] Almacenar código php

Pues no, si solo tú vas a meter el código PHP a ejecutar pues no pasa nada, pero si vas a dejar al público en general pues te puedes quedar sin server pronto jaja
  #11 (permalink)  
Antiguo 25/04/2013, 02:04
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 7 meses
Puntos: 270
Respuesta: [Duda] Almacenar código php

Cita:
Iniciado por nicolaseguez Ver Mensaje
Si vas a permitir que el usuario ingrese su propio codigo bajo ningun punto de vista utilizaria eval() siendo que le estas permitiendo ejecutar cualquier tipo de funcion con codigo malicioso.

De alguna forma tenes que filtrar ese codigo antes de ejecutarlo. Por otra parte aprovecho para presentarme, este es mi primer mensaje :P
Exactamente, qué diferencia hay entre usar un código enviado por un usuario , interpretándolo como una cadena, y usando "eval", que interpretarlo como código php y usarlo con "include"?

La cosa de que "eval es peligrosooo!!No lo useeees!!" viene de que hay algunos casos en los que puede ser extremadamente peligroso, y poniendo la venda alrededor de todo el cuerpo, la conclusión es "no lo uses jamás"...Al no entender exactamente el por qué, uno acaba tranquilo porque usa "include" en vez de "eval"...
Pues es exactamente lo mismo....
  #12 (permalink)  
Antiguo 25/04/2013, 03:52
 
Fecha de Ingreso: febrero-2010
Mensajes: 45
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: [Duda] Almacenar código php

Por que no haces algo similar a lo que hace facebook?

Deja que se creen sus propios php, pero no dejes que hayan conexiones a la base de datos u otras funciones. Un ejemplo sería te creas tu función que hace las consultas a la base de datos y restringe cuales acciones no son posible.
  #13 (permalink)  
Antiguo 25/04/2013, 05:54
 
Fecha de Ingreso: enero-2009
Ubicación: España
Mensajes: 786
Antigüedad: 15 años, 10 meses
Puntos: 9
Respuesta: [Duda] Almacenar código php

Cita:
Iniciado por dashtrash Ver Mensaje
Exactamente, qué diferencia hay entre usar un código enviado por un usuario , interpretándolo como una cadena, y usando "eval", que interpretarlo como código php y usarlo con "include"?

La cosa de que "eval es peligrosooo!!No lo useeees!!" viene de que hay algunos casos en los que puede ser extremadamente peligroso, y poniendo la venda alrededor de todo el cuerpo, la conclusión es "no lo uses jamás"...Al no entender exactamente el por qué, uno acaba tranquilo porque usa "include" en vez de "eval"...
Pues es exactamente lo mismo....
Porque no quería usar archivos php, pero si dicen que es muy poco seguro... La idea es crear una aplicación, a la que solo tenga acceso poca gente a la que yo les de. Además de que para probar las aplicaciones no se prueban en el mismo sitio web, si no en una aplicación "sandbox"

Cita:
Iniciado por xorow Ver Mensaje
Por que no haces algo similar a lo que hace facebook?

Deja que se creen sus propios php, pero no dejes que hayan conexiones a la base de datos u otras funciones. Un ejemplo sería te creas tu función que hace las consultas a la base de datos y restringe cuales acciones no son posible.
Pero si permites php, pueden programar cualquier cosa. Y el único modo que conozco es crear como etiquetas para que al reemplazarlas sean funciones en php con sus parametos..

<application title="test" width="100" height="200"></application>

El problema es que si usas preg_replace (Que ya lo he intentado) y pasas esos parámetros a través de una función no los ejecuta correctamente. Por ejemplo:

'/\<application title\="(.*?)"\ icon\="(.*?)"\ id\="(.*?)"\ width\="(.*?)"\ height\="(.*?)"\ top\="(.*?)"\ left\="(.*?)"\ max\="(.*?)"\ min\="(.*?)"\ close\="(.*?)"\>(.*?)\<\/application\>/is',

Se reemplaza con:

getApp('$1,'$2,'$3', etc..)

Pero al realizar consultas MySQL en esa función, no las recoge correctamente parece..
  #14 (permalink)  
Antiguo 25/04/2013, 09:53
 
Fecha de Ingreso: septiembre-2011
Mensajes: 480
Antigüedad: 13 años, 2 meses
Puntos: 18
Respuesta: [Duda] Almacenar código php

Para guardar codigo en la base de datos! no me complico mucho con eso! lo que yo hago primero antes de guardarlo en la BD es encriptarlo con base64_encode(); luego alli si lo guardo en la base de datos! y alli ya de una pierdo el riesgo de que alguna caracter o algo asi dañe el codigo fuente, ya luego que lo ingreso en la BD encriptado! al consultarlo lo des encripto con el base64_decode() y ademas le paso el eval() y listo! :D espero haberte ayudado!
  #15 (permalink)  
Antiguo 25/04/2013, 11:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: [Duda] Almacenar código php

Si solo vas a permitir algunas funciones, entonces sí es necesario que hagas algún filtro previo a usar eval(), porque si no pues te van a meter un gol por ahí...

Si vas a usar expresiones regulares y una pseudo sintáxis, es lo más "seguro" (piensa como lo hace BBCode) ya que entonces solo parseas justamente las expresiones que quieres y lo demás lo dejas aparte.

Saludos.
  #16 (permalink)  
Antiguo 25/04/2013, 12:04
 
Fecha de Ingreso: abril-2013
Mensajes: 32
Antigüedad: 11 años, 7 meses
Puntos: 5
Respuesta: [Duda] Almacenar código php

Cita:
Iniciado por dashtrash Ver Mensaje
Exactamente, qué diferencia hay entre usar un código enviado por un usuario , interpretándolo como una cadena, y usando "eval", que interpretarlo como código php y usarlo con "include"?

La cosa de que "eval es peligrosooo!!No lo useeees!!" viene de que hay algunos casos en los que puede ser extremadamente peligroso, y poniendo la venda alrededor de todo el cuerpo, la conclusión es "no lo uses jamás"...Al no entender exactamente el por qué, uno acaba tranquilo porque usa "include" en vez de "eval"...
Pues es exactamente lo mismo....
La idea seria que limite la cantidad de funciones que pueda ejecutar. No se trata de no usarlo, pero justamente este caso plantea un mal uso de la funcion. Por eso tendria que pasarle algun tipo de filtro con regex o de cualquier otra forma para evitar que el user ingrese codigo malicioso. NO USEN EVAL PARA EJECUTAR CODIGO INGRESADO POR EL USUARIO, sea php o javascript. Es totalmente desaconsejable, y sobre todo si no se ha filtrado

Etiquetas: almacenar, html, usuarios
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 14:43.