2011-04-03 6 views
6

¿Cuáles son las ventajas/desventajas de ambos?HTMLPurificador vs Kses

¿Cuál de ellas usarías para filtrar el comentario de un usuario en una publicación en un sitio web?

+2

http://htmlpurifier.org/comparison enumera las diferencias probablemente el más objetivas y de forma global. Parece aconsejar htmLawed (una bifurcación) sobre kses. – mario

Respuesta

7

kses no se ha actualizado en 7 años, creo que eso es suficiente para eliminarlo de inmediato.

Sin embargo, la verdadera pregunta es: ¿Tiene necesita para aceptar la entrada HTML en los comentarios de los usuarios?

Porque si no lo hace, la solución correcta al problema está utilizando htmlspecialchars antes de repetir los comentarios como HTML, y eso es todo. No se requiere nada más.

Incluso si necesita permitir a los usuarios formatear sus comentarios, hay varios lenguajes de marcado alternativos (BBCode, MarkDown, Textile - esto es lo que SO usa cuando escribe) que son ampliamente utilizados y más que adecuados para el tarea.

Considere que incluso puede compilar Wikipedia sin aceptar la entrada HTML.

+0

@IainCollins: Por supuesto, puede crear XSS si usa un sabor suficientemente poderoso de MarkDown et al. Mi punto es que * no deberías estar haciendo eso *. E incluso si lo hace, 'htmlspecialchars' evitará XSS. – Jon

+0

Ese comentario fue pensado para ser una respuesta a otra publicación relacionada con el escape al utilizar el descuento (comentario eliminado); Lo había dejado abierto para volver más tarde y mezclar las pestañas. Observo que, si bien defiendo "no debería estar haciendo eso", se usa en su respuesta y en la publicación, lo que puede hacer que se detenga la reflexión. Tenga en cuenta que si usa markdown o similar, usar PHP htmlspecialchars() no es apropiado. –

0

Recientemente he creado un puerto de filtro Drupal XSS. Es una versión avanzada de Kses. https://github.com/ymakux/xss

$filter = new Filter(); 

// List of allowed protocols 
$allowed_protocols = array('http', 'ftp', 'mailto'); 

// List of allowed tags you want to keep in text 
$allowed_tags = array('a', 'i', 'b', 'em', 'span', 'strong', 'ul', 'ol', 'li', 'table', 'tr', 'td', 'thead', 'th', 'tbody'); 

$filter->addAllowedProtocols($allowed_protocols); 
$filter->addAllowedTags($allowed_tags); 

// Parse string 
$filtered_string = $filter->xss($string); 
Cuestiones relacionadas