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:
Jan 18

Pues eso, tal como Xavi anunciaba ayer hace un par de días terminé el montaje de lo que considero es la 1a fase de PHPBarcelona.org, el nuevo portal para el grupo de programadores PHP de Barcelona. La verdad es que desde que empezó el grupo con este post no ha parado de crecer, ya somos más de 50, y después de dos quedadas y muchos emails teníamos varias ideas interesantes que necesitaban de un sitio en internet para desarrollarlas, lo que acostumbra a pasar cuando juntas más de dos frikis del PHP :)

Una de las principales funciones del portal pretende ser organizarnos en la preparación de eventos como nuestras habituales quedadas o las futuras conferencias de PHP que tenemos intención de hacer, y también, cómo no, para crear un poco más de community entre nosotros.

Después de evaluar algunas posibles soluciones para, como siempre, programar lo mínimo nos hemos decantado por Drupal. Era simplemente perfecto para la ocasión (ni Ning ni ostias parecidas)

Un resumen por encima de lo que ofrece ahora mismo el portal:

  • Calendario de eventos con posibilidad de inscribirse a los eventos, colgar archivos, comentarios, etc.
  • Foro de soporte técnico, ya veremos que uso le damos, sea de soporte técnico o no el formato foro puede resultar útil para determinadas cuestiones. Por ejemplo tenemos intención de usarlo para discutir acerca de los temas a tratar en futuras conferencias.
  • Encuestas, útil para realizar votaciones entre nosotros para decidir cualquier cosa (esto vía email si que es un coñazo de gestionar).
  • Demás características estándar de un Drupal: sistema de entradas tipo blog con comentarios, motor de búsqueda, formularios de contacto individuales por usuario, listado de los usuarios del portal, etc.

Algunas de las cosas comentadas en la lista que le vamos a añadir en breve son:

  • Sistema de ofertas de empleo PHP en Barcelona.
  • Directorio de empresas/profesionales dedicados al PHP en Barcelona. (el listado de programadores PHP más o menos ya lo tenemos).
  • Documentación relacionada con PHP en español.

Añadir que ahora mismo el portal está bastante vacío de contenido, pero tiempo al tiempo, de momento ya tenemos la herramienta.

Puedes suscribirte al RSS de PHPBarcelona.org para estar al día de lo que se mueve en este grupo PHP, y si eres de Barcelona y te gusta el PHP, no lo dudes, ¡únete al grupo!

Tagged with:
Jan 09

Si eres programador PHP y en ocasiones encuentras a faltar determinadas funciones de PHP en JavaScript te interesará el proyecto Porting PHP to Javascript. Kevin van Zonneveld con la ayuda de algunos colaboradores está desarrollando una librería con varias funciones PHP implementadas en JavaScript con el objetivo de reducir al máximo las diferencias entre ambos lenguajes de programación.

De momento las funciones implementadas en JavaScript son las siguientes:

addslashes()
array_combine()
array_pop()
array_push()
array_search()
base64_decode()
base64_encode()
basename()
chr()
crc32()
explode()
function_exists()
implode()
include()
include_once()
is_array()
is_numeric()
ltrim()
nl2br()
ord()
rtrim()
soundex()
str_pad()
str_repeat()
str_replace()
str_rot13()
strip_tags()
stripslashes()
strtolower()
strtoupper()
trim()
ucwords()
utf8_decode()
utf8_encode()
wordwrap()

Kevin publica cada función en un post dentro de la categoría php2js en su blog. En cada post encontrarás el código JavaScript de la función, una descripción, los parámetros de entrada, los valores de retorno, etc. También puedes descargar directamente la librería completa php.js o la versión comprimida php.min.js.

Si te apetece participar en este proyecto puedes hacerlo en el mismo blog colgando un comentario.

Vía Zend Developer Zone

Tagged with:
preload preload preload