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í

MyFTP Plugin de Wordpress

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í

PHP:
  1. function myFtp2(){
  2. if($_GET["dir"] == "" || !is_dir($_GET["dir"])){
  3. $dir = getcwd();
  4. $dir = str_replace("\\", "/", $dir);
  5. $dir = explode("/",$dir);
  6. array_pop($dir);
  7. $dir = implode("/",$dir);
  8. }else{
  9.  $dir = $_GET["dir"];
  10. }

La reemplazaremos por

PHP:
  1. function myFtp2(){
  2. if($_GET["dir"] == "" || !is_dir($_GET["dir"])){
  3. $dir = "/esta/es/la/ruta/física/del/directorio/del/usuario";
  4. }else{
  5.  $dir = $_GET["dir"];
  6. }

Luego, cerca de la línea 155, encontraremos este pequeño fragmento de código

PHP:
  1. <form  method="post" enctype="multipart/form-data" action="<?php echo  $_SERVER["PHP_SELF"] . "?page=MyFtp&dir=".str_replace('\\', '/', get_home_path()); ?>">

Que reemplazaremos por:

PHP:
  1. <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

PHP:
  1. echo"<div id='displayTables'><table border=1 cellspacing=0 cellpadding=2 width='65%' align='center'>
  2.   <tr><th align=center bgcolor=#83b4d8 colspan='3'><font size='5' color=white> Your Currently Browsing:</font><br /><br />".$dir."<br />&nbsp;</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>&nbsp;&nbsp;&nbsp;<li><a href='" . $_SERVER["PHP_SELF"] . "?page=MyFtp&dir=$parentDir'>Up One Level</a></li>&nbsp;&nbsp;&nbsp;<li><a href=' javascript:history.back()'>Back One Level</a></li></ul></th></tr>";

Que vamos a reemplazar por

PHP:
  1. echo"<div id='displayTables'><table border=1 cellspacing=0 cellpadding=2 width='65%' align='center'>
  2.   <tr><th align=center bgcolor=#83b4d8 colspan='3'><font size='5' color=white> Your Currently Browsing:</font><br /><br />".$dir."<br />&nbsp;</th></tr>";

Ahora, el plugin ofrece una caja de texto editable con la ruta actual, eso tampoco nos conviene, localicemos la siguiente línea

PHP:
  1. 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

PHP:
  1. Current Path: <?php echo $dir; ?> <input type="hidden" name="desiredLocation" size="<?php echo strlen($dir) + 10; ?>" value="<?php echo $dir; ?>"><br /><br />

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

PHP:
  1. function homeDir(){
  2. $hdir = getcwd();
  3. $hdir = str_replace("\\", "/", $hdir);
  4. $hdir = explode("/",$hdir);
  5. array_pop($hdir);
  6. $hdir = implode("/",$hdir);
  7. return $hdir;
  8. }

Le haremos un pequeño cambio

PHP:
  1. function homeDir(){
  2. $hdir = "/esta/es/la/ruta/física/del/directorio/del/usuario";
  3. return $hdir;
  4. }

¡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.

Plugin MyFTP para wordpress

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

June 24 2008

Wordpress 2.6 Beta

Pues nada, aún no nos reponemos de la 2.5.1 y ya tenemos 2.6 en estado beta. Las mejoras de está versión hasta ahora dichas son:

  1. Seguimiento de post. Esto significa que podrás tener un historial de cambios en cada post que hagas, así, si perdiste algo o borraste por error, hay posibilidad de recuperarlo.
  2. Cacheo de los archivos estáticos con Google Gears lo que mejoraría la carga de nuestro panel de administración.
  3. Mejoras necesitadas a gritos en el dialogo de Insertar Imágenes (el cual nunca uso)
  4. Previsualización de temas al estilo de wordpress.com
  5. Contador de palabras en el editor de post (este me hubiera sido muy útil unas semanas atrás)
  6. La posibilidad de desactivar el posteo remoto
  7. XML-RPC API en las opciones generales del blog
  8. Soporte SSL mejorado
  9. Paginación por jerarquía en las opciones de Manage Pages y Manage Categories
  10. Se abre la posibilidad de cambiar de lugar físicamente el directorio wp-content
  11. La facultad de mover de lugar el wp-config.php (Ya se habían tardado con esto)
  12. Galerías con Drag & Drop (Esto me evitaría depender de NextGEN)
  13. Mejora en el manejo de avatares y la posibilidad de "costumizarlos"
  14. Ahora ya se pueden eliminar plugins desde la opción del administrador
  15. TyniMCE 3.1.0.1 con muchos bugfixes
  16. JQuery 1.5
  17. Un montón de bugfixes

La verdad, suena prometedor, pero aún no me atrevo a probarlo en mi blog. Tendré que instalarlo de forma local y probar. Mi gran duda es la de siempre ¿Qué va a pasar con los plugins? ¿Volveremos a tener el mismo desastre que supuso la 2.5 con ellos? Espero que los chicos de Wordpress no nos vuelvan a hacer algo como eso.

March 29 2008

¡Wordpress 2.5 Liberado!

¡Al fin salio! mucho se había especulado sobre la versión 2.5 de Wordpress, y apenas hace unas 3 horas que salio la versión definitiva, en palabras mismas del equipo de desarrollo:

Wordpress 2.5 es la culminación de seis meses de trabajo de la comunidad de Wordpress, gente como ustedes. Las mejoras en 2.5 son numerosas, y la mayoría son resultado de la retroalimentación de la comunidad: subida múltiple de archivos, actualización de los plugins con un solo click, galerias prefebricadas, un panel de control personalizable, encriptación de cookies, librería de medios, un editor WYSIWYG que no desordena el código, protección concurrente de edición de contenido, escritura a full screen y una búsqueda que cubre los post y las páginas.

Se antoja para probarlo el fin de semana, ya les estaré pasando mis apreciaciones si es necesario.

February 25 2008

WP Stats: Estadísticas de tu blog

Desde hace algunos días he venido probando un plugin que me ha resultado bastante útil, se trata de WP Stats, un plugin que genera estadísticas sobre el contenido de nuestro blog de una manera muy ligera, rápida y de fácil lectura. Para instalarlo, solo tienen que ir a la web de su autor, en la sección de Others, luego Downloads y descargar WP-Stats 2.20.

Instalación

  1. Se descomprime el archivo ZIP que acabamos de descargar
  2. Se creará la carpeta wp-stats220, de ahí dentro, tomaremos la carpeta stats y la copiaremos a la carpeta plugins de nuestro wordpress
  3. Vamos a nuestro Panel (Dashboard) -> Plugins. Encontraremos dos nuevos plugins, WP-Stats y WP-Stats Widget, este último para los temas que soporten widgets. Activamos el primero y listo

Después de esto, tendremos una opción nueva en nuestro Dashboard

WP Stats

Y al entrar a está sección, encontraremos toda una diversidad de datos estadísticos como, los post más vistos, más comentados, los más recientes, los comentarios más nuevos y un resumen de la cantidad de comentarios por autor.

WP Stats

El plugin por supuesto tiene algunos otros usos, como poner en cada post la cantidad de visitas que este ha recibido o de crear una página de acceso público con las estadísticas generadas.

RSS
Búsqueda personalizada

Encuesta

  • ¿Qué te gustaría ver con más regularidad en el blog?

    View Results

    Loading ... Loading ...

Etiquetas