🔒 Registro cerrado · Apertura oficial próximamente · Acceso exclusivo para alumnos activos
Iniciar SesiónSanitizar HTML enriquecido con librería probada
5 tareas · 40 min · Principiante
A veces la aplicación tiene que dejar pasar HTML a propósito: reseñas con negrita, listas y enlaces. Codificar ya no sirve, porque borraría el formato. Lo que queda es sanitizar, y sanitizar bien es difícil. Tinajacoa limpia las reseñas con un filtro escrito en casa y propone cambiarlo por una librería con lista de permitidos. Se revisan el filtro, la propuesta, los casos de calidad y todos los caminos por los que entra una reseña.
Objetivo de la sala
A veces la aplicación tiene que dejar pasar HTML a propósito: reseñas con negrita, listas y enlaces. Codificar ya no sirve, porque borraría el formato. Lo que queda es sanitizar, y sanitizar bien es difícil. Tinajacoa limpia las reseñas con un filtro escrito en casa y propone cambiarlo por una librería con lista de permitidos. Se revisan el filtro, la propuesta, los casos de calidad y todos los caminos por los que entra una reseña.Sanitizar es analizar el HTML como lo haría un navegador, quedarse con los elementos, atributos y esquemas de enlace que están en una lista de permitidos y descartar todo lo demás. Un filtro hecho con expresiones regulares hace lo contrario: busca patrones malos conocidos dentro de un texto que no entiende. Falla por dos lados. No sabe cómo el navegador va a reconstruir un marcado irregular, y cada elemento o atributo nuevo que nadie previó pasa sin más, porque no estaba en su lista de cosas malas.
Por eso la hoja de referencia de OWASP para prevenir XSS recomienda, para HTML escrito por usuarios, una librería de sanitización probada en lugar de un filtro propio, y parchearla con regularidad, porque los navegadores cambian. Las librerías serias trabajan con lista de permitidos y se configuran: decides qué elementos, atributos y esquemas aceptas. En PHP una de las conocidas es HTML Purifier (licencia LGPL-2.1), que combina listas de permitidos con un analizador propio.
Responde para continuar
¿Cuál es el defecto de diseño de un sanitizador que quita bloques script y atributos que empiezan por on?
Ver pista de ayuda
Piensa en qué pasa con un elemento que no está ni en una lista ni en la otra.
Abre el laboratorio y lee LimpiadorCasero.php y pruebas-sanitizador.txt en la carpeta tinajacoa-resenas. El equipo de calidad describió cada caso por su categoría y anotó qué hizo con él el filtro actual y qué hizo la librería con la configuración propuesta.
Responde para continuar
¿En cuántos casos de calidad el filtro casero conserva el marcado y la librería lo elimina?
Ver pista de ayuda
Cuenta las filas con conserva en la tercera columna y elimina en la cuarta.
Una librería con lista de permitidos es tan buena como su lista. Lee sanitizador-resenas.php y busca en los casos de calidad el que la librería conserva sin que nadie lo quiera en una reseña. Un atributo que permite estilos en línea deja que una reseña se ponga encima del resto de la página o la tape entera, sin una sola línea de script.
Responde para continuar
¿Qué atributo de la configuración propuesta hay que quitar para que la librería deje de conservar ese caso? Escribe solo el nombre del atributo.
Ver pista de ayuda
Mira qué caso conservan las dos columnas sin ser formato de texto.
El mejor sanitizador no sirve en la ruta que no lo llama. Las reseñas entran por la web y por la app móvil, y las dos terminan en la misma tabla que la ficha del libro pinta con |raw. Compara ResenaController.php con ResenaApiController.php y busca en rutas-api.php cuál es la ruta del segundo.
Responde para continuar
¿Qué ruta de la API guarda reseñas sin pasarlas por ningún sanitizador? Escríbela tal como aparece en el archivo de rutas.
Ver pista de ayuda
Busca el método que inserta el texto tal como llega del JSON.
Queda decidir el sitio. Si se sanitiza al guardar, todos los caminos de entrada tienen que pasar por el mismo punto; si se sanitiza al pintar, cualquier contenido viejo queda cubierto por la política vigente. Muchas aplicaciones guardan el original y sanitizan al pintar, o guardan las dos versiones y vuelven a sanitizar cuando cambia la política.
Responde para continuar
¿Qué diseño cierra el hallazgo de las reseñas de Tinajacoa sin depender de que cada nuevo camino de entrada se acuerde del sanitizador?
Ver pista de ayuda
El cliente móvil lo controla quien lo usa, no la biblioteca.
Whoami-Labs Pro
Whoami-Labs Pro utiliza cookies
Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad
Preferencias
Configuraciones de cookies
Elige qué categorías permitir. Las esenciales siempre están activas. Consulta la Política de Privacidad.
Esenciales
Siempre activas · sesión, CSRF, tema y esta preferencia
Necesarias para iniciar sesión, proteger formularios (CSRF) y recordar tu elección de cookies y tema. Sin ellas la plataforma no funciona de forma segura.
Analíticos
Hoy no activos en la plataforma; listos para cuando se conecten
Nos ayudan a entender uso de cursos y páginas. Si los activas, se usarán cuando conectemos analítica; hasta entonces no se carga ningún tracker.
Marketing
Hoy no activos; campañas futuras solo con tu permiso
Comunicaciones o campañas. No activos hoy en la plataforma; quedarán listos si los conectamos y solo si los permites.