Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Contextos 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.

0 de 5 · 0%

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 &#039; 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.

Inicia sesión para registrar tus puntos y progreso en el ranking.

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