Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Mensajes entre ventanas: validar origen y contenido

5 tareas · 40 min · Principiante

La política del mismo origen impide que dos páginas de orígenes distintos se lean entre sí, y por eso el navegador ofrece un canal controlado para que conversen: postMessage. El canal es seguro solo si quien recibe pregunta quién le escribe y qué le escribe, y si quien envía dice a quién. Empleos Tangaral recibió la queja de un puntaje de prueba psicotécnica que nadie cree. Se leen sus receptores, sus emisores, los orígenes que deberían hablarle y el registro de diagnóstico de mensajes.

0 de 5 · 0%

Objetivo de la sala

La política del mismo origen impide que dos páginas de orígenes distintos se lean entre sí, y por eso el navegador ofrece un canal controlado para que conversen: postMessage. El canal es seguro solo si quien recibe pregunta quién le escribe y qué le escribe, y si quien envía dice a quién. Empleos Tangaral recibió la queja de un puntaje de prueba psicotécnica que nadie cree. Se leen sus receptores, sus emisores, los orígenes que deberían hablarle y el registro de diagnóstico de mensajes.

Cuando una ventana llama a postMessage, el navegador entrega a la otra un evento message con tres datos útiles: data, lo que se envió; origin, el origen de la página que lo envió; y source, una referencia a esa ventana. El valor de origin lo pone el navegador y la página emisora no lo puede falsificar. Lo que el navegador no hace es filtrar: entrega el mensaje a cualquier receptor que esté escuchando, venga de donde venga. La decisión de aceptar o descartar es del código del receptor.

Responde para continuar

¿Qué hay que saber del campo origin del evento message?

Ver pista de ayuda

Una parte es una garantía del navegador y la otra es una obligación del código.

Un receptor que no compara origin acepta mensajes de cualquier ventana que tenga una referencia a la página: un marco que ella incrusta, una ventana que la abrió o que ella abrió. Si además pinta lo recibido con innerHTML, el mensaje se convierte en contenido ejecutable dentro del portal: un XSS cuya entrada es otra ventana. La falta de comprobación del origen se clasifica como CWE-346 (error de validación de origen).

Abre receptores.js y origenes-esperados.txt.

Responde para continuar

¿Qué receptor acepta mensajes sin comprobar quién los envía? Escribe el nombre de la función.

Ver pista de ayuda

Busca el receptor que nunca menciona e.origin.

Comparar el origen con funciones de texto parciales (contiene, empieza por, termina en) deja pasar orígenes que nadie autorizó: cualquiera puede registrar un dominio cuyo nombre contenga o termine en el texto que se busca. La comparación correcta es de igualdad exacta contra una lista corta de orígenes completos, con esquema y host. Cruza el receptor de resultados con registro-mensajes.txt.

Responde para continuar

¿Desde qué origen llegó el resultado de prueba que el portal aceptó sin venir del proveedor? Escríbelo con esquema.

Ver pista de ayuda

Hay dos resultados aceptados del proveedor real y uno más; el descartado no cuenta.

El problema tiene otra cara: el emisor. postMessage recibe como segundo argumento el origen al que se dirige el mensaje, y el navegador solo lo entrega si la ventana de destino tiene ese origen en ese momento. Con "*" se entrega a quien esté ahí. Si la página que envía puede quedar dentro de un marco de un sitio cualquiera, o si la ventana de destino pudo navegar a otra dirección, el dato termina en manos ajenas. Abre emisores.js.

Responde para continuar

¿Qué función envía datos personales del candidato a cualquier ventana que contenga la página? Escribe su nombre.

Ver pista de ayuda

Busca el emisor que no dice a qué origen va el mensaje.

El tercer receptor del archivo es el modelo a seguir: origen exacto, ventana esperada y forma del dato validada antes de usarlo. A eso se suma no pintar nunca el contenido de un mensaje como HTML. Y hay un problema de diseño que ninguna comprobación arregla: un puntaje que decide una contratación no debería llegar por un mensaje del navegador, sino de servidor a servidor.

Responde para continuar

¿Qué propones para los receptores del área del candidato?

Ver pista de ayuda

Tómalo del receptor de la sesión y súmale cómo se pinta el texto.

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