Foros del Web » Programando para Internet » PHP »

[Aporte] Limpiar HTML

Estas en el tema de [Aporte] Limpiar HTML en el foro de PHP en Foros del Web. Recientemente en uno de los sitios que he desarrollado se están presentando problemas porque los usuarios pueden publicar HTML y copian el contenido desde Word ...
  #1 (permalink)  
Antiguo 10/08/2012, 13:44
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
[Aporte] Limpiar HTML

Recientemente en uno de los sitios que he desarrollado se están presentando problemas porque los usuarios pueden publicar HTML y copian el contenido desde Word y, por alguna extraña razón, a pesar de validar que las etiquetas abiertas tengan un cierre, algunas páginas se desfasan, obteniendo mensaje de error en HTML Validator (complemento de Firefox) acerca de etiquetas no cerradas.

Estoy usando una versión antigua de CKEditor, todavía se llamaba FCKEditor, pero estas herramientas funcionan para cualquiera, TinyMCE (ups, no recuerdo otros!), incluso si el origen proviene de archivos, base de datos, $_POST, etc.

Lo primero que busqué fue directamente la extensión PHP Tidy, pero requiere que PHP se haya compilado para permitir su uso y también hay que modificar php.ini

Principalmente por portabilidad (no tener que configurar servidores) y por algunos comentarios en contra, seguí buscando opciones.

Encontré HTML Purifier que, para ser sinceros, parece una de las mejores alternativas, pero la estructura de directorios y la cantidad de archivos me hizo desistir, no tanto por no poder configurarlo, sino porque mis necesidades en estos momentos son tan básicas que se me hace exagerada la herramienta.

Finalmente, di con htmLawed, script de un único archivo, fácil de configurar, documentación y ejemplos incluidos en la descarga y, lo más importante, parece cubrir al 100% mis necesidades.

Entrados en materia, la configuración que requiero es esta:

Código PHP:
Ver original
  1. $htmLawedConfig = array(
  2.     'elements' => '* -object',  // Permitir todas las etiquetas, excepto object
  3.     'keep_bad' => 0,        // Eliminar etiquetas malformadas o no permitidas
  4.     'clean_ms_char' => 2,   // Eliminar caracteres raros insertados por MS-Word
  5.     'comment' => 1,     // Eliminar comentarios html <!-- Esto -->
  6.     'css_expression' => 1,  // Permitir style="" en etiquetas
  7. );
  8.  
  9. // Incluimos el script
  10. include 'htmLawed.php';
  11.  
  12. // Saneamos una entrada desde $_POST
  13. $myHtml = htmLawed($_POST['rich_text'], $htmLawedConfig);
  14.  
  15. // Voilà!

htmLawed() tiene una opción para evitar ataques XSS, pero prefiero usar el aporte de GatorV, que aplico previamente a todas las entradas ($_GET, $_POST, $_COOKIE, etc.).

Cabe aclarar que después de esto realizo validaciones, como permitir el uso de Javascript sólo a administradores y otros detalles de ese tipo.

Espero que a alguien pueda serle útil esta info.
__________________
- León, Guanajuato
- GV-Foto

Última edición por Triby; 10/08/2012 a las 13:52

Etiquetas: html, limpiar, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 6 personas




La zona horaria es GMT -6. Ahora son las 01:20.