utilizarlos - php call stored procedure mysql with parameters
¿Cómo ejecuto PHP que está almacenado en una base de datos MySQL? (7)
Estoy tratando de escribir una página que llama PHP que está almacenada en una base de datos MySQL. La página que está almacenada en la base de datos MySQL contiene código PHP (y HTML) que quiero ejecutar en la carga de la página.
¿Cómo podría hacer esto?
¿Ha considerado usar su sistema de control de fuente para almacenar diferentes horquillas para las diversas instalaciones (y los módulos que difieren entre ellas)? Esa sería una de las mejores prácticas para la configuración de la aplicación que se me ocurre. El tuyo no es un requisito inusual, por lo que es un problema que otros han resuelto en el pasado; y el almacenamiento de código en una base de datos es uno que creo que le resultaría difícil encontrar referencia o recibir el asesoramiento como una buena práctica.
Qué bueno que publicaste la aclaración. Probablemente, sin querer, has presentado una respuesta en busca de una pregunta adecuada.
Cómo lo hice es tener un campo en la base de datos que identificó algo único sobre el bloque de código que necesita ejecutarse. Esa palabra está en el nombre de archivo de ese código. Puse las cuerdas juntas para señalar el archivo php que se incluirá. ejemplo:
$lookFor = $row[''page''];
include("resources/" . $lookFor . "Codebase.php");
De esta forma, incluso si un pirata informático pudiera acceder a su DB, no podría poner código malicioso directamente allí para ser ejecutado. Tal vez podría cambiar la palabra de referencia, pero a menos que realmente pueda poner un archivo directamente en el servidor no le haría ningún bien. Si pudiera poner los archivos directamente en el servidor, de todos modos quedarías hundido si realmente quiere ser desagradable. Sólo mis dos centavos valen la pena.
Y sí, hay razones por las que desea ejecutar código almacenado, pero hay contras.
Fácil:
$x // your variable with the data from the DB
<?php echo eval("?>".$x."<?") ?>
Avísame, funciona muy bien para mí en MUCHAS aplicaciones, no puedo dejar de notar que todo el mundo es rápido para decir lo malo que es, pero lento para ayudar con una respuesta directa ...
Lea el código php de la base de datos y guárdelo en un archivo con un nombre único y luego incluya el archivo de esta manera fácil para ejecutar el código php y depurarlo.
$uniqid="tmp/".date("d-m-Y h-i-s").''_''.$Title."_".uniqid().".php";
$file = fopen($uniqid,"w");
fwrite($file,"<?php /r/n ".$R[''Body'']);
fclose($file);
// eval($R[''Body'']);
include $uniqid;
Puede usar el comando eval para esto. Sin embargo, recomendaría no hacerlo, porque hay muchas trampas que usan este enfoque. La depuración es difícil (er), implica algunos riesgos de seguridad (se ejecuta mal contenido en la base de datos, uh oh).
Ver cuándo es eval evil en php? por ejemplo. Google for Eval es Evil, y encontrarás muchos ejemplos de por qué deberías encontrar otra solución.
Adición: Otro buen artículo con algunas referencias a exploits es este blogpost . Se refiere a los exploits vBulletin y phpMyAdmin anteriores que fueron causados por un uso inapropiado de Eval.
Puede ver la función eval en PHP. Le permite ejecutar código PHP arbitrario. Sin embargo, puede ser un gran riesgo para la seguridad y es mejor evitarlo.
eval()
se cubrió en otras respuestas aquí. Acepto que debes limitar el uso de eval
menos que sea absolutamente necesario. En lugar de tener código PHP en db, podría tener solo un nombre de clase que tenga un método llamado, digamos, execute()
. Siempre que necesite ejecutar su código PHP personalizado, simplemente instale la clase del nombre que acaba de obtener de db y ejecute ->execute()
en él. Es una solución mucho más limpia y le ofrece un gran campo de flexibilidad y mejora significativamente la seguridad del sitio.