[SOLUCIONADO] Problemas para desproteger cadena y escribirla a archivo !!

Iniciado por Diabliyo, 24 Febrero 2009, 18:24 PM

0 Miembros y 1 Visitante están viendo este tema.

Diabliyo

Tengo una aplicacion en donde cierta parte del sistema se encarga de editar codigos fuente de archivos PHP subidos por el usuario. La idea del sistema es que el usuario pueda subir su archivo PHP y este pueda ser interpretado por el sistema, oviamente las cuestiones de seguridad estaran en manos del usuario ya que si el script php que suba el usuario contiene bugs, ya seria responsabilidad del usuario miso, porteriormente, si el usuario desea EDITAR su archivo ya subido en el sistema, realize una formita donde muestra el contenido del archivo PHP (textarea) y el usuario puede editarlo, el problema es que despues de que edita o hace las modificaciones y pulsa el boton GUARDAR, el nuevo archivo PHP (con el mismo nombre) es guardado con exito pero las lineas de codigo que presentan una comilla doble ", tienen antepuesto un slash o barra / y oviamente el archivo ya no puede ser mostrado por el sistema web debido a que ese slash o barra no permite ser interpretado :(

Para interpretar los script PHP del usuario, utilizo solamente: include( "folder/del/usuario/scripts/archivo.php" );

Aqui les dejo un poco de codigo.

Funciones
Código (php) [Seleccionar]

<?php
function proteger_cadena$cadena )
{
return htmlentities($cadenaENT_QUOTES);
}

function 
desproteger_cadena_src$cadena )
{
return html_entity_decode($cadenaENT_QUOTES);
}
?>


Formulario
Código (php) [Seleccionar]
<?php
//primero leemos el ID de la noticia que fue colgada como SCRIPT, despues se consultan los datos como: url del script y nombre
//despues se hace la apertura con FOPEN() en modo lenctura y se muestra en el formulario

$xconsultar_con"NOTICIAS""ID='"$ctl"'" ); //consultamos noticia
$buf_xmysql_fetch_array($x); //extraemos datos
$file_descfopen"../".$buf_x["ARCHIVOS_URL"].$buf_x["ARCHIVOS_NOMBRE"], "r" ); //abrimos archivo PHP
$msgfread$file_descfilesize("../".$buf_x["ARCHIVOS_URL"].$buf_x["ARCHIVOS_NOMBRE"]) ); //leemos todo el archivo a un buffer
fclose($file_desc); //cerramos archivo

//parte del formulario que muestra el contenido del script paa su edicion
echo "<td>Contenido:</td><tr>";
echo 
"<td><textarea name=\"mensaje_noticia\" class=\"estilo_03\">";
echo 
proteger_cadena($msg); //protegemos cadena
echo "</textarea></td><tr>";

echo 
"<td align=\"center\"><input type=\"submit\" class=\"boton_01\" value=\"Modificar Scriptin\"></td>";
?>


Sobre-escribiendo SCRIPT acutal por nueva modificacion.
Código (php) [Seleccionar]
<?php
$path
"../uploads/noticias/"//direccion de la carpeta
$file_editconsultar_datos_general"NOTICIAS""ID='"proteger_cadena($_GET["id_src"]). "'""archivos_nombre" ); //obtenemos NOMBRE del archivo PHP
$msgdesproteger_cadena_src($_POST["mensaje_noticia"]); //eliminamos las tags que estorben

//creamos arreglo para guardar informaion del cambio
$valores= array(
"id"=>"'"$_GET["id_src"]. "'",
"autor_mod"=>"'"$_SESSION["log_usr"]. "'",
"titulo"=>"'"proteger_cadena($_POST["titulo_noticia"]). "'",
"fecha_mod"=>"'"time(). "'" );

//escribimos los datos nuevos haciando la aprtura del mismo archivo existente PHP, pero truncado a
//0 para despues escribirle el buffer modifiado
$src_filefopen$path.$file_edit"w" ); //apertura de archivo
fwrite$src_file$msgstrlen($msg) ); //escritura de archivo
fclose($src_file); //cierre de archivo

unset($msg);

if( 
actualizar_bdd"NOTICIAS"$valores )==)
echo "Error en la Insercion de los Datos.";
else
echo "Datos Agregados con Exito.";
?>


HardieVon

chale, desproteger cadenas, esa no me la sabia.  :xD

esto te puede ayudar bastante. leetelo completo.

http://www.programacionweb.net/articulos/articulo/?num=61

Diabliyo

Cita de: HansVon en 24 Febrero 2009, 21:13 PM
chale, desproteger cadenas, esa no me la sabia.  :xD

esto te puede ayudar bastante. leetelo completo.

http://www.programacionweb.net/articulos/articulo/?num=61

Listo men, fuiste la salvacion :D !!

Finalmente solo tuve que modificar lo siguiente:

Código (php) [Seleccionar]
<?php
//linea antigua que me escribia el codigo con slashes
fwrite$src_file$msgstrlen($msg) );

//liea modificada que hace todo bien :D
fwrite$src_filestripslashes($msg), strlen($msg) ); 
?>