Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Revisar un módulo entero buscando el contexto equivocado

5 tareas · 40 min · Principiante

Las salas anteriores miraron un punto cada vez. El trabajo real es otro: recibir un módulo completo, encontrar todos los lugares donde un dato entra en la salida y decidir, uno por uno, si la codificación corresponde al contexto. Tinajacoa te entrega una búsqueda sobre la agenda cultural, dos controladores y la lista de quién escribe cada dato. Se arma el inventario, se cuenta, se prioriza y se deja una regla para que no vuelva.

0 de 5 · 0%

Objetivo de la sala

Las salas anteriores miraron un punto cada vez. El trabajo real es otro: recibir un módulo completo, encontrar todos los lugares donde un dato entra en la salida y decidir, uno por uno, si la codificación corresponde al contexto. Tinajacoa te entrega una búsqueda sobre la agenda cultural, dos controladores y la lista de quién escribe cada dato. Se arma el inventario, se cuenta, se prioriza y se deja una regla para que no vuelva.

Un barrido de salidas se hace con método: buscar todas las inserciones (en plantillas, las llaves dobles y las salidas sin escape; en JavaScript, las asignaciones a innerHTML, outerHTML, insertAdjacentHTML y sus parecidos frente a textContent), y para cada una anotar archivo y línea, contexto, estrategia que se aplica y de dónde viene el dato. La pregunta de cada fila es la misma: ¿la estrategia es la del intérprete que lee el valor en ese punto?

Abre el laboratorio y lee barrido-insercion.txt en la carpeta tinajacoa-agenda, con sus notas al final. Recuerda que todas las plantillas escapan para HTML por extensión, que parrafos escapa antes de añadir saltos y que |e('url') codifica para una dirección.

Responde para continuar

¿Cuántas de las trece líneas de la búsqueda insertan un dato con una codificación que no corresponde a su contexto?

Ver pista de ayuda

Revisa atributos sin comillas, estilos, scripts, parámetros de dirección y asignaciones de HTML en JavaScript.

No todas las salidas las arma el servidor. Un archivo de JavaScript que concatena datos y los asigna como HTML crea el mismo problema que una plantilla sin escape, solo que en el navegador. La forma correcta en el cliente es tratar el dato como texto con textContent o crear los nodos uno a uno.

Responde para continuar

¿Qué archivo de JavaScript de la agenda inserta como HTML un dato que escriben los organizadores? Escribe su nombre de archivo.

Ver pista de ayuda

Compara la propiedad que usa cada uno de los dos archivos de JavaScript.

Pasar datos al script como JSON es la idea correcta, pero un bloque <script> lo cierra el analizador de HTML al ver la secuencia de cierre de etiqueta, sin importar si está dentro de una cadena de JavaScript. Por eso el JSON que se inserta dentro de un script necesita que < y > salgan como secuencias de escape. AgendaController.php arma agenda_json con los títulos de los organizadores; SedeController.php, de otro módulo, hace lo mismo con las sedes.

Responde para continuar

¿Qué constante de json_encode le falta a agenda_json para que los signos de etiqueta de los títulos no salgan tal cual? Escríbela tal como aparece en el código.

Ver pista de ayuda

Compara las banderas de las dos llamadas a json_encode.

Cinco puntos mal codificados no pesan lo mismo. La prioridad la marca quién controla el dato, cuántas personas lo ven y qué tan fácil es que el valor salga del contexto. Lee otra vez el origen de los datos en encargo.txt.

Responde para continuar

¿Cuál de estos puntos mal codificados puede ir al final de la cola de arreglos de la agenda de Tinajacoa?

Ver pista de ayuda

Busca el dato que ya está atado por una lista de permitidos antes de llegar a la plantilla.

Un barrido manual encuentra lo de hoy. Lo de mañana lo encuentra una regla automática y una prueba que se repite en cada cambio.

Responde para continuar

¿Qué deja instalado un buen cierre del barrido en el repositorio de la agenda?

Ver pista de ayuda

Lo que se pide es algo que falle solo, sin depender de la memoria de nadie.

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