🔒 Registro cerrado · Apertura oficial próximamente · Acceso exclusivo para alumnos activos
Iniciar SesiónContextos de salida y su codificación
5 tareas · 40 min · Principiante
La validación decide qué entra; la codificación decide cómo sale. Y no hay una sola manera de codificar: lo que protege un dato dentro de un párrafo no lo protege dentro de un script, de una dirección o de una regla de estilo. En Tinajacoa los eventos los cargan grupos culturales externos y el equipo dice que «todo pasa por |e». Se lee la ficha pública de un evento punto por punto junto con una prueba de caracteres del equipo de calidad.
Objetivo de la sala
La validación decide qué entra; la codificación decide cómo sale. Y no hay una sola manera de codificar: lo que protege un dato dentro de un párrafo no lo protege dentro de un script, de una dirección o de una regla de estilo. En Tinajacoa los eventos los cargan grupos culturales externos y el equipo dice que «todo pasa por |e». Se lee la ficha pública de un evento punto por punto junto con una prueba de caracteres del equipo de calidad.Una página web no la lee un solo intérprete. El analizador de HTML lee el cuerpo y los atributos; dentro de un <script> manda el de JavaScript; dentro de style manda el de CSS; dentro de un href la dirección se analiza como URL. Cada uno tiene sus caracteres especiales. En el cuerpo de HTML lo peligroso es < y &; en un atributo entre comillas, la comilla; en un atributo sin comillas, también el espacio; en una cadena de JavaScript, la comilla y la barra invertida; en un parámetro de URL, el ampersand, el igual, la almohadilla y el espacio; en CSS, el punto y coma y los dos puntos.
La regla de la hoja de referencia de OWASP para prevenir XSS es codificar cada dato según el contexto donde se inserta, y MITRE nombra el error de usar la codificación de otro contexto: CWE-838, codificación inapropiada para el contexto de salida. Twig, el motor de plantillas de este portal, trae una estrategia para cada caso en su filtro escape: html, html_attr, js, css y url. |e sin argumento usa html.
Responde para continuar
Un valor se codifica para HTML y se inserta dentro de una cadena de JavaScript en un bloque script. ¿Por qué no basta?
Ver pista de ayuda
Piensa en qué caracteres escapa htmlspecialchars y cuáles le importan a una cadena de JavaScript.
Abre el laboratorio y lee ficha-evento.html.twig en la carpeta tinajacoa-eventos. Todas las salidas pasan por |e, es decir, por la estrategia de HTML. Ubica el contexto de cada una: cuerpo, atributo con comillas, atributo sin comillas, parámetro de URL, CSS o JavaScript. Después contrasta con prueba-caracteres.txt: el HTML recibido es idéntico en los siete campos, pero lo que hizo el navegador no.
Responde para continuar
¿Qué campo del evento se imprime en un atributo sin comillas? Escríbelo tal como aparece en la plantilla, sin el prefijo evento.
Ver pista de ayuda
Busca un signo igual seguido directamente de llaves dobles.
Repasa los siete puntos de inserción de la ficha y decide en cuáles la estrategia de HTML corresponde a su contexto y en cuáles no. Un atributo href entre comillas que recibe una dirección completa cuenta como contexto de atributo (su problema es otro y lo verás en la tarea siguiente).
Responde para continuar
¿En cuántos de los siete puntos de inserción de la ficha la estrategia de HTML no es la que pide su contexto?
Ver pista de ayuda
Revisa el atributo sin comillas, el parámetro de la dirección, el estilo y el script.
Hay un caso donde codificar bien no alcanza. Si un enlace recibe una dirección completa escrita por otra persona, la codificación de atributo impide que el valor se salga de las comillas, pero no decide a dónde lleva el enlace. Un esquema que no sea de navegación web hace que el clic haga otra cosa. Ahí la defensa es de validación: aceptar solo https (y http si el negocio lo pide) al guardar, y además codificar al pintar. Revisa eventos.csv.
Responde para continuar
¿Qué evento tiene guardado un enlace de inscripción cuyo esquema no es http ni https? Escribe su código.
Ver pista de ayuda
Mira el principio de cada valor de la última columna.
La nota de calidad muestra el segundo síntoma del script: el apóstrofo de un nombre real aparece como ' en la tarjeta, porque dentro de un script nadie decodifica las entidades de HTML. El dato queda corrupto aunque no rompa nada.
Responde para continuar
¿Qué forma de pasar el organizador al script de la ficha respeta su contexto?
Ver pista de ayuda
La codificación tiene que ser la del intérprete que va a leer el valor.
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.