Mar 16

Hace poco más de dos semanas se liberó la versión 5.2.9 del PHP. La que probablemente será la última release de la rama 5.2.x… o al menos eso esperamos muchos como yo que andamos impacientes por la llegada de la 5.3 estable con todas sus novedades.

Como siempre se corrigen un buen número de bugs de seguridad (algunos relacionados con las extensiones libxml y XML) y se añaden algunas mejoras menores… por ejemplo, como curiosidad, ahora a la función array_unique le podemos pasar el tipo de comparación a realizar para descartar ítems. En el changelog están detallados todos los cambios.

En mi opinión siempre es muy recomendable actualizar los servidores a la última versión, si queremos podemos esperar unas semanas para ver como reacciona internet a una nueva release pero se ha de tener en cuenta que lleva meses de test por parte de la comunidad (algo en lo que, por cierto, cualquiera puede participar). Me parece sorprendente todavía encontrar sistemas/proyectos corriendo PHP 4.x o incluso 5.0.x / 5.1.x. (aunque PHP 5 sigue sonando a nuevo se ha de pensar que la versión 5.0 salió el Julio del 2004 y la 5.1 el Noviembre del 2005).

A pesar de que muchas distribuciones Linux (no tanto los *BSD) incluyen como estables versiones desfasadas del PHP si uno tiene un servidor web (LAMP) creo que es recomendable conseguir tener la combinación Apache+MySQL+PHP lo más actualizada posible. Es la forma de aprovechar las nuevas funcionalidades existentes (sobretodo en el caso del PHP dado que es un lenguaje de programación :) y también es la forma de encontrar bugs y hacer que estos proyectos open source evolucionen correctamente.

PS: Por suerte HostGator hace tiempo que se pusieron las pilas y nos mantienen bastante actualizados (este blog corre sobre PHP 5.2.8).

Tagged with:
Jan 29

HTML Purifier es una librería para filtrar HTML escrita en PHP que permite eliminar el código malicioso (XSS) a la vez que comprueba que el HTML valide contra el estándar correspondiente.

Una de las principales diferencias de HTML Purifier comparada con otras librerías de filtrado HTML es que descompone por completo el HTML y verifica que cada uno de los elementos se encuentre dentro de una whitelist de elementos permitidos en lugar de limitarse a buscar elementos prohibidos en una blacklist (normalmente desfasada). A la vez que elimina el código no deseado también hace algo poco común en librerías de este tipo, valida que el HTML cumpla el estándar correspondiente y si no lo cumple realiza las modificaciones necesarias para corregirlo.

Puedes usar HTML Purifier tanto para filtrar datos de entrada, en el caso de que sea posible recibir código HTML, como el HTML de salida de tu aplicación. Lo más frecuente es usarla para filtrar datos de entrada como comentarios, emails, el resultado de algunos editores WYSIWYG, etc.

Se ha de tener presente que dado su funcionamiento interno es una librería muy potente pero pesada y lenta, no es para nada recomendable filtrar la salida de tu aplicación cada vez que generas código HTML. Mucho mejor filtrar la entrada y asegurar que el contenido de tu sistema está limpio. En todo caso para filtrar la salida se convierte en algo obligatorio trabajar con algún sistema de cache (generar páginas estáticas, un reverse proxy, en BD capturando el output-buffer, etc.)

A continuación explico brevemente su instalación y uso.

Instalación

[1] Descargar el archivo htmlpurifier-3.0.0.tar.gz y descomprimirlo en el servidor. No es necesario que esté accesible para los usuarios, puedes colocarlo fuera del DocumentRoot. Ten en cuenta que la última versión (la 3.0) sólo es compatible con PHP5.

[2] Poner los permisos adecuados a los directorios que HTML Purifier usará para cachear algunos archivos. Los directorios en cuestión son DefinitionCache/Serializer y todos sus subdirectorios. Si tenemos acceso por shell al servidor lo solucionamos con un:

chmod -R 0777 HTMLPurifier/DefinitionCache/Serializer

Utiliza 0777 o 0775 según convenga, el objetivo es permitir al servidor web escribir en estos directorios.

[3] Es necesario tener instalada la extensión iconv si quieres trabajar con un enconding distinto de UTF-8 y si quieres una salida más bonita del HTML también es necesaria la extensión tidy.

[4] Para mayor comodidad puedes incluir el directorio de la HTML Purifier en tu include_path a pesar de que es recomendable sólo hacer require() cuando vayas a usarla, es una librería bastante grande.

Usando la librería

[php] $dirty_html = ‘prueba’;
require_once ‘/directorio_de_htmlpurifier/library/HTMLPurifier.auto.php’;
//require_once ‘HTMLPurifier.php’;
$config = HTMLPurifier_Config::createDefault();
$config->set(‘Core’, ‘Encoding’, ‘ISO-8859-1’);
$config->set(‘HTML’, ‘Doctype’, ‘HTML 4.01 Transitional’);
$purifier = new HTMLPurifier($config);
$clean_html = $purifier->purify($dirty_html);
echo $clean_html; [/php]

En el ejemplo se incluye el archivo HTMLPurifier.auto.php indicando la ruta completa, si has añadido el directorio de la librería en tu include_path puedes incluir HTMLPurifier.php directamente (usa la línea comentada).

En este ejemplo simple se está configurando HTML Purifier para que trabaje con ‘HTML 4.01 Transitional’ codificado en ‘ISO-8859-1’. Por defecto la librería trabaja con ‘XHTML 1.0 Transitional’ en ‘UTF-8’, si este es el único tipo de documento y codificación que necesitas puedes eliminar las llamadas a set() y no es necesario crear el objeto $config. Existen muchos otros parámetros de configuración que se merecen una ojeada aunque para un funcionamiento normal no es necesario tocar casi nada.

También existen plugins para varios CMS conocidos para empezar a usar HTML Purifier de una forma todavía más fácil. Entre ellos está el plugin HTML Purified para WordPress y el módulo HTML Purifier para Drupal.

Tagged with:
Nov 12

Desde el pasado 8 de Noviembre tenemos disponible una nueva entrega del PHP, la 5.2.5. Al igual que la versión anterior está centrada en la corrección de bugs sin muchas funcionalidaddes nuevas.

Se corrigen alrededor de 60 bugs algunos sobre temas de seguridad, como siempre puedes consultar la lista completa en el changelog oficial.

Tagged with:
Aug 31

Como viene siendo habitual después de tres meses desde la última actualización ya tenemos disponible una nueva versión del PHP, la 5.2.4. Es básicamente una versión de corrección de bugs sin muchas novedades adicionales con el objetivo de ofrecer mucha más estabilidad a la rama 5.2.X.

Se corrigen más de 120 bugs sobre temas variados y algunos pocos de seguridad pero de baja prioridad. Podéis consultar un listado completo de los cambios en el changelog oficial.

Tagged with:
Jun 01

No hace ni un mes desde la última entrega y ya tenemos disponible una nueva versión de nuestro querido PHP, la 5.2.3. Básicamente es una versión de corrección de bugs, todavía algunos referentes a la seguridad de los encontrados en el MOPB. A parte de esto se mejoran varias cosas como las funciones para generar MD5, llamadas al sistema, etc. podéis ver una lista completa de los cambios en el Changelog oficial.

Actualización:

Según Stefan Esser:

Otra vez no todos los bugs de seguridad corregidos son mencionados en la nota de release.
Otra vez bugs conocidos por los desarrolladores no son corregidos correctamente.

Más información aquí.

Tagged with:
preload preload preload