Prevenir ataques XSS con HTML Purifier

HTML Purifier

Que son los ataques XSS (cross site scripting) y por qué hay que evitarlos es algo esencial que merece un post a parte.

La idea con la que hay que tienes que quedarte, es que si tienes o planeas realizar una página web donde permites que otros usuarios editen o publiquen contenido HTML (ya sea en forma de páginas, comentarios, etc…), debes de alguna manera validar que el contenido HTML que están generando es seguro.

Hay muchas librerias que se encargan de filtrar y validar estos contenidos HTML para asegurarse que la gente que sube contenidos no va a hacer nada malo. Yo por mi parte he estado mirando hace un rato, porque tampoco iba a ponerme a hacer la mía (no es mi objetivo en la vida  sacrificar dos semanas de trabajo si puedo usar algo que ya existe y funciona), y me he encontrado con HTML Purifier, una librería de PHP bastante extensa y con muchisima funcionalidad que se encarga de filtrar codigo maligno.

Utilizarla es muy muy sencillo. Sólo requiere dos lineas (una vez incluido el archivo base).

require_once '/path/to/htmlpurifier/library/HTMLPurifier.auto.php';

$purifier = new HTMLPurifier();
$clean_html = $purifier->purify($dirty_html);

Lo bueno de esta libreria, es que se pueden configurar muchisimas cosas, como limitar el número de tags, los atributos por tag, etc… e incluso es capaz de reformatear código html inválido y convertirlo en código válido (tal y como pueden hacen otras librerias como BeautifulSoup en Python o como Tidy HTML para C/C++)

También cabe destacar que en principio esta libreria NO REFORMATEA el código HTML, simplemente se encarga de eliminar o reformatear las partes peligrosas o inválidas.

Seguramente en el futuro vuelva a hacer algún otro post sobre el tema, sin embargo, si teneis ocasion, recomiendo echarle un vistazo al libro Building scalable web sites de Cal Henderson. Aunque seguramente en la wikipedia y googleando un poco encontrareis bastante información.

Trackback URL

, , ,

9 Comments on "Prevenir ataques XSS con HTML Purifier"

  1. Marcelo
    28/01/2010 at 5:29 pm Permalink

    Hola… descargué la libreria ya que he tenido ataques del tipo xss, cuáles son los archivos de la libreria que se ponen en la raiz, y donde se coloca estas lineas de código?
    —————————————————————————————-
    require_once ‘/path/to/htmlpurifier/library/HTMLPurifier.auto.php’;

    $purifier = new HTMLPurifier();
    $clean_html = $purifier->purify($dirty_html);
    —————————————————————————————-
    Si me ayudas te lo agradeceré..

  2. Pau Sanchez
    28/01/2010 at 11:48 pm Permalink

    Pues básicamente en el archivo PHP donde lo quieras usar, eso sí, en el require_once sólo tienes que poner la ruta a donde te hayas bajado la librería.

    $dirty_html es la cadena que quieres purificar, y $clean_html es la cadena una vez limpia de codigo maligno.

    Un saludo!

  3. Marcelo
    29/01/2010 at 10:43 am Permalink

    Hola, gracias por responder.
    Dusculpa pero no me quedó del todo claro.
    Osea que no hay que subir la libreria al FTP del sitio? hay que vincularla… Mi web no está en PHP, es sólo html, y los archivos afectados son los index.html y los .js. Si me puedes decir como se vincula y en que lugar se ponen las lineas de código, gracias!!!!!!

  4. Pau Sanchez
    31/01/2010 at 4:13 am Permalink

    @Marcelo, tu servidor debe soportar PHP. Eso lo primero, si no no puedes.
    Si guardas un documento en tu servidor con extensión PHP, y en ese documento pones algo como:
    < ?php echo "El código PHP se está ejecutando";?>

    Si cargas esa página en tu navegador, y ves la frase “El código PHP se está ejecutando” sin lo de < ?php ..?> Entonces es que el servidor donde tienes alojada tu web funciona bien.

    Si no se ve eso, ciertamente no tienes soporte para PHP.

    Si realmente tienes soporte para PHP, entonces te recomiendo que busques apoyo en Google. Hay muchas cosas que explicar, y yo ciertamente ahora no tengo tiempo para explicartelo personalmente.

    Siento no poder ayudarte más allá. De todos modos, espero que nuestro amigo Google te ayude ;)

    Busca guias y tutoriales de PHP, o busca ayuda en algún chat o foro.

    Un saludo!

Hi Stranger, leave a comment:

ALLOWED XHTML TAGS:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Subscribe to Comments