Categories
Provocación WordPress

Realidad (¿ligeramente?) distorsionada de un bug

Un fenómeno que últimamente noto en relación a WordPress -- al menos en bloggers hispanos, es que cada vez existe menos tolerancia a los errores que se presentan en cada versión. En mi opinión, estos errores se deben principalmente a que el proceso de desarrollo de este CMS y el código en si, son en cierta forma desordenados; pero por otro lado, la comunidad tampoco ayuda mucho en el reporte de errores, me pregunto ¿cuántos de los que lo usan y usualmente se quejan han tomado parte de su tiempo para reportar algún fallo o comportamiento erróneo en el lugar adecuado?.

He leído también por ahí a un blogger que comentaba que con usar y darle "publicidad" (léase enlaces) a WordPress era más que suficiente para de cierto modo "pagar" por el uso de éste, pero particularmente creo ese comportamiento se aleja de lo que debería ser y/o hacerse en una verdadera comunidad de un proyecto de Software Libre.

En fin, todo este desvarío de ideas se debe a un curioso caso que empezó con una entrada que publicó Héctor titulada "Bug grave en WordPress 2.5.1", a lo cual -- probablemente por el título -- otros bloggers escribieron entre otras cosas (negritas intencionalmente resaltadas):

Un gran problema de seguridad presenta la ultima versión de WordPress 2.5.1, gracias a la ayuda de sigt tenemos una simple y rápida solución. S recomienda modificar estos archivos ya que el bug no estara resuelto hasta la proxima version de WP 2.5.2

Código Geek

Pues sí, salió la actualización WordPress 2.5.1, y ya han descubierto un bug de seguridad. Además, si usaban el plugin XML Sitemaps actualícenlo ya a la última versión si no quieren que su servidor eche humo.

La Brújula Verde

[...] Por otro lado, apenas salió la actualización, se encontró un nuevo error bastante crítico, como explican en SigT y Bitperbit, el cual ya tiene solución. [...]

Geek Spot

Ahora, supongo que a cada uno le corresponde determinar que tan grave es no poder resetear la contraseña de sus propios blogs, "afortunadamente" para mi, hasta el momento no tuve la necesidad de hacer eso ni una sola vez.

Finalmente, me gustaría acotar que este "gravísimo" error se produjo porque había que corregir un problema de seguridad real y el que hizo la corrección no se percató del código que dependía de dicha funcionalidad -- posiblemente si se usaran pruebas unitarias y de integración se evitarían este tipo de casos.

Categories
Web WordPress

WordPress 2.5 y el nuevo panel de admistración

Una de las razones para no actualizar este blog a la última versión de WordPress es que no me gusta nada el nuevo diseño del panel de administración, principalmente porque en las pruebas que hice tengo que usar mucho "scroll" para escribir entradas y precisamente no me agrada perder tiempo en ese tipo de cosas. 🙂

Bueno, desde hace algunos días quería hacer cambios para volver a la misma estructura de versiones anteriores, pero debido a mis limitados conocimientos de CSS y falta de tiempo, no hice casi nada. En fin, luego de revisar la página de reporte de bugs de este proyecto, encontré que Judy Becker se tomó el trabajo de hacer los cambios (¡gracias!) para que la estructura de "Escribir entrada" y "Escribir página" sean -- a mi modo de ver -- más usables (en realidad asemeja a la estructura que se tenía en versiones anteriores):

Diseño modificado del panel de administración de WordPress 2.5

Si quieren descargar aplicar estos cambios a su versión de wordpress, pueden aplicar el siguiente parche o sobreescribir directamente los archivos que cambian -- hasta donde he probado, estos cambios funcionan bien en Firefox (2.0.0.13) e Internet Explorer 7.

Por cierto, para los que todavía no actualizaron a WordPress 2.5 y quieren hacerlo, les sugiero que esperen un poco porque seguramente la siguiente versión corregirá algunos problemas de seguridad leves.

Categories
Web WordPress

Nueva versión de WordPress y algunas aclaraciones

A estas alturas imagino que las pocas personas que leen este blog y que usan WordPress para sus propios blogs, seguramente ya saben que salió una nueva versión de este CMS, hablamos de WordPress 2.3.2. Entre los problemas corregidos en esta versión están:

  • Mejora de rendimiento que evita que la función sanitize_post sea invocada siempre que se llame a get_post (#5325).
  • Cambios en la función is_admin() para que realmente indique si el código se ejecuta en el panel de administración (/wp-admin/). (#5487).
  • No mostrar los mensajes de error al hacer consultas SQL a menos que WP_DEBUG esté habilitado (#5473).
  • Verificar que los datos de conexión a la base de datos sean adecuadas y mostrar mensajes de error si la instalación falla debido a permisos insuficientes (#5495).
  • Soporte para páginas de error personalizadas cuando la conexión a la base de datos falla. (#5500).
  • Cambios para hacer que la generación de enlaces en los contenidos de la entrada y comentarios sea más selectiva. ([6450]).
  • Cambios en wp-mail.php para evitar posibles ataques XSS (#5484).
  • Cambios para que no se muestren las entradas recientes a usuarios que no tienen permisos (#5535).
  • Cambios para eliminar información sensitiva expuesta a través del método XMLRPC wp.getAuthors (#5534).
  • Verificación de permisos en varios métodos XMLRPC ([6504]).
  • Verificación de permisos en varios métodos del protocolo de publicación Atom ([6508]).
  • Cambios en la función validate_file() para evitar problemas de inclusión local de ficheros en windows ([6521]).

Fuente

Aclaración

Erróneamente se me atribuye el descubrimiento de un bug relacionado a la función is_admin que permitía ver los borradores y entradas privadas. Mi participación en esta última versión tiene que ver más que todo con problemas relacionados a XMLRPC, wp-mail.php y otros que por el momento no puedo comentar, puesto que no tienen que ver mucho con la versión clásica de WordPress y además las correcciones a estos problemas probablemente recién se incluyan en la nueva versión. Aquí un extracto, ligeramente modificado para no dar ningún detalle, del intercambio de correos que tuve con uno de los desarrolladores:

By the way, we added some measures to address the problem you found. It's on wordpress.com right now. It's a fairly big change, and since its mainly an MU problem, we won't address it in WP until either 2.3.3 or 2.4.
Sound good?

Finalmente, es posible que esta sea la última entrada que escriba este año antes de viajar a mi pueblo natal, pero no quiero irme sin antes agradecer a todos y cada uno de ustedes por cada visita, enlace o comentario que hayan hecho.

Les deseo un feliz y próspero 2008.

Categories
Web WordPress

Nueva versión del plugin “Permalink Fix”

Hace algún tiempo publiqué una versión alpha de un plugin que elimina todos los caracteres especiales de los permalinks (Ejm: ¿, !, etc). Si bien es cierto que este plugin hacía relativamente bien su trabajo, existía un bug en el para las entradas anteriores que contenían ese tipo de caracteres, devolvía una página de error (no encontrado).

Aprovechando el tiempo libre de estas fiestas de fin de año he corregido este bug, de modo que ahora el plugin sólo se ejecuta antes de guardar las entradas:

php:

<?php
/*
Plugin Name: Permalink Fix
Plugin URI: http://www.buayacorp.com/
Description: Elimina algunos caracteres especiales de las URLs de las entradas (Ejm: ¿, !, etc).
Author: Alexander Concha
Version: 0.1.2
Author URI: http://www.buayacorp.com/
*/

if (!defined('ABSPATH')) die;

// Based on sanitize_title_with_dashes method (wp-includes/formatting.php)
function custom_sanitize_title_with_dashes($title) {
        $title = strip_tags($title);
        // Preserve escaped octets.
        $title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---1---', $title);
        // Remove percent signs that are not part of an octet.
        $title = str_replace('%', '', $title);
        // Restore octets.
        $title = preg_replace('|---([a-fA-F0-9][a-fA-F0-9])---|', '%1', $title);

        $title = remove_accents($title);

        if (function_exists('mb_strtolower') && seems_utf8($title)) {
                $title = mb_strtolower($title, 'UTF-8');
        } else {
                $title = strtolower($title);
        }

        $title = preg_replace('/&.+?;/', '', $title); // kill entities
        $title = preg_replace('/[^%a-z0-9 _-]/', '', $title);

        $title = preg_replace('/[\s-]+/', '-', $title);
        $title = trim($title, '-');

        return $title;
}

function __enable_fix($post_name) {
        remove_filter('sanitize_title', 'sanitize_title_with_dashes');
        add_filter('sanitize_title', 'custom_sanitize_title_with_dashes');

        return $post_name;
}

add_filter('pre_post_name', '__enable_fix');
?>

Si por azares del destino alguien está usando este plugin 😀 , es recomendable que actualicen para evitar este molesto error. Pueden descargar la actualización desde este blog o desde mi repositorio temporal de código.

Categories
Seguridad Web WordPress

WordPress: sitios que permiten la suscripción de usuarios y el “robo” de emails

Muchas veces he querido habilitar la suscripción de usuarios en este blog por diferentes motivos: problemas con el spam, evitar que se muestre publicidad a lectores habituales, etc; pero todas esas veces tuve que desistir porque de un modo u otro he ido descubriendo que esta opción puede "costarme caro" si es que algún usuario malintencionado tiene algo en contra mía. 😀

Entre los problemas que recuerdo haber reportado y que requerían del registro de usuarios activado tenemos los siguientes:

Volviendo al tema central, este problema de seguridad del que había comentado meses atrás en el blog de David, permite que un usuario registrado obtenga la lista completa de usuarios, roles y correos electrónicos del blog o sitio afectado. El proceso para recuperar esta lista es bastante sencilla y sólo basta invocar al método wp.getAuthors a través de la interface XMLRPC:

php:

<?php
include './class-IXR.php';

$client = new IXR_Client('http://dominio.com/xmlrpc.php');
$client->query('wp.getAuthors', 1, 'alex', '1234');

$response = $client->getResponse();

print_r($response);
?>

Luego de reportar este problema leve en wordpress.com (y por consiguiente cualquier otro sitio basado en WordPress MU), ya existe un ticket con parche incluido que pone fin a esta situación y es recomendable que actualicen aquellos sitios que tengan la suscripción de usuarios habilitada.