validacion - Estricta validación HTML y filtrado en PHP
validar email php expresion regular (4)
El HTML enviado por el usuario no siempre es válido o, de hecho, está completo. Los navegadores interpretarán una amplia gama de HTML no válido y debes asegurarte de que puedas atraparlo.
También tenga en cuenta el aspecto válido:
<img src="http://www.mysite.com/logout" />
y
<a href="javascript:alert(''xss hole'');">click</a>
Estoy buscando las mejores prácticas para realizar validación / filtrado estricto (lista blanca) de HTML enviado por el usuario.
El objetivo principal es filtrar XSS y errores similares que se pueden ingresar a través de formularios web. El propósito secundario es limitar la rotura del contenido HTML ingresado por usuarios no técnicos, por ejemplo, a través del editor WYSIWYG que tiene una vista HTML.
Estoy considerando utilizar HTML Purifier , o hacer mi propio uso de un analizador HTML DOM para pasar por un proceso como HTML (sucio) -> DOM (sucio) -> filtro-> DOM (limpio) -> HTML (limpio).
¿Puedes describir los éxitos con estas o cualquier otra estrategia más fácil que también sea efectiva? ¿Alguna trampa que hay que tener en cuenta?
El W3C tiene un gran paquete de código abierto para validar HTML disponible aquí:
Puede descargar el paquete usted mismo y probablemente implementar lo que sea que esté haciendo. Desafortunadamente, parece que muchos analizadores de DOM parecen estar dispuestos a ceder las reglas para asignar código HTML "en la naturaleza" por así decirlo, por lo que es una buena idea dejar que los maestros te digan lo que está mal y no dejarlo. una herramienta más práctica: hay muchos sitios web que no son perfectos, que cumplen HTML pero que usamos todos los días.
He probado todos los exploits que conozco en HTML Purifier y me fue muy bien. Filtra no solo HTML, sino también CSS y URL.
Una vez que restringe los elementos y atributos a los inocentes, las dificultades se encuentran en el contenido de los atributos: javascript:
pseudo-URL (IE permite tabular caracteres en el nombre del protocolo java	script:
todavía funciona) y propiedades de CSS que activan JS.
El análisis de URL puede ser complicado, por ejemplo, estos son válidos: http://spoof.com:[email protected]
o //evil.com
. Los dominios internacionalizados (IDN) se pueden escribir de dos maneras: Unicode y punycode.
Vaya con HTML Purifier: tiene la mayoría de estos resueltos. Si solo quiere arreglar HTML roto, entonces use HTML Tidy (está disponible como extensión PHP).
Utilicé HTML Purifier con éxito y no he recibido ningún xss u otro filtro de entrada no deseado. También ejecuto el HTML desinfectar a través de la extensión Tidy para asegurarme de que también lo valida.