July 30 2008
Hackeando el plugin MyFTP
MyFTP es un plugin muy útil que te permite tener un mini cliente FTP dentro de tu Dashboard de Wordpress, hace poco se me planteo una simple necesidad, que el usuario pudiera subir archivos de cualquier tipo y luego compartirlos como él quisiera. Por experiencia, todos sabemos que cuando le pones demasiados botoncitos y carpetitas al usuario irremediablemente terminará clickando por "accidente" el botón de borrar, pues como bien indica el autor de este plugin, realmente es tan poderoso que puedes borrar lo que quieras. Imagínense eso en las manos del típico usuario tentón que cree que la página que se le entrega es una mujer facilota dispuesta a ser manoseada por todos lados. Pues simplemente no podemos confiar en él, recuerden la filosofía Housiana... "el usuario miente" y nunca te dirá que él se jodió la carpeta themes y que por eso ya no se ve el tema del blog, o se cargo toda la carpeta upload y por eso ya no existen más los archivos.
Como él miente y nosotros queremos quitárnoslo de encima, vamos a hacerle un pequeño ajuste a este plugin para encasillar al usuario en un solo directorio y que no pueda salir de ahí, así si se carga sus archivos, será culpa única y exclusivamente de él, y nosotros habremos salvado a un usuario pobre de morir ahorcado con un cable usb.
Primero lo primero, instalar el plugin
Descarguemos el plugin desde aquí, procedamos a descomprimirlo, subirlo a nuestro servidor en el directorio de plugins de Wordpress y activarlo. Después de activarlo, vamos a Settings, ahí encontraremos una opción llamada MyFTP, el plugin luce así

Modificando el plugin
Tentadores esos botones de Delete File y Delete Folder, ¿no es cierto? Además, notemos que estamos en el home de nuestro servidor, por lo que podemos borrar lo que queramos, así que vamos de una vez a bloquear el acceso. Vamos a modificar los archivos de forma local y luego subiremos nuestro resultado al servidor. Abra el archivo myftp.php y localice la función myFtp2, que luce así
La reemplazaremos por
-
function myFtp2(){
-
$dir = "/esta/es/la/ruta/física/del/directorio/del/usuario";
-
}else{
-
$dir = $_GET["dir"];
-
}
Luego, cerca de la línea 155, encontraremos este pequeño fragmento de código
-
<form method="post" enctype="multipart/form-data" action="<?php echo $_SERVER["PHP_SELF"] . "?page=MyFtp&dir=".str_replace('\\', '/', get_home_path()); ?>">
Que reemplazaremos por:
-
<form method="post" enctype="multipart/form-data" action="<?php echo $_SERVER["PHP_SELF"] . "?page=MyFtp&dir=".str_replace('\\', '/', '/este/es/el/directorio/físico/del/usuario'); ?>">
Luego, por la línea 171, encontraremos un echo muy grande, este para ser exactos
-
echo"<div id='displayTables'><table border=1 cellspacing=0 cellpadding=2 width='65%' align='center'>
-
<tr><th align=center bgcolor=#83b4d8 colspan='3'><font size='5' color=white> Your Currently Browsing:</font><br /><br />".$dir."<br /> </th></tr><tr><th align=center colspan='3'><ul id='submenu'><li><a href='" . $_SERVER["PHP_SELF"] . "?page=MyFtp&dir=".str_replace('\\', '/', get_home_path())."'>Home</a></li> <li><a href='" . $_SERVER["PHP_SELF"] . "?page=MyFtp&dir=$parentDir'>Up One Level</a></li> <li><a href=' javascript:history.back()'>Back One Level</a></li></ul></th></tr>";
Que vamos a reemplazar por
-
echo"<div id='displayTables'><table border=1 cellspacing=0 cellpadding=2 width='65%' align='center'>
-
<tr><th align=center bgcolor=#83b4d8 colspan='3'><font size='5' color=white> Your Currently Browsing:</font><br /><br />".$dir."<br /> </th></tr>";
Ahora, el plugin ofrece una caja de texto editable con la ruta actual, eso tampoco nos conviene, localicemos la siguiente línea
-
Current Path: <input type="text" name="desiredLocation" size="<?php echo strlen($dir) + 10; ?>" value="<?php echo $dir; ?>"><br /><br />
Y la vamos a reempleazar por
En resumen, lo que hemos hecho fue quitar los botones de Home, Up One Level y Back One Level, así como quitar la caja de texto subtituyendola por un objeto hidden para no perder la ruta que hemos establecido. Guardemos los cambios. Ahora, hay que abrir el archivo myftpFunctions.php y encontrar la función homeDir
-
function homeDir(){
-
return $hdir;
-
}
Le haremos un pequeño cambio
-
function homeDir(){
-
$hdir = "/esta/es/la/ruta/física/del/directorio/del/usuario";
-
return $hdir;
-
}
¡Y listo! Hay que guardar este otro archivo, subir de nuevo el plugin a la carpeta de plugins de wordpress en nuestro servidor y actualizar.

Nota importante: El plugin esta bajo licencia GNU y es propiedad de su autor, yo solo le hice algunos ajustes para adaptarlo a una necesidad, en ningún momento me estoy adjudicándo la creación de dicho plugin





Excelente adaptacion del Dr. House “ellos siempre mienten” xD