Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

226
Vistas
Asegurar Javascript postMessage del mismo origen y oyente de mensajes, ¿es esto suficiente?

Esta es mi primera incursión en el uso de postMessage. Quiere asegurarse de que la comunicación entre el iframe secundario y el padre sea segura.

Según esta página: https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

"Si espera recibir mensajes de otros sitios, siempre verifique la identidad del remitente usando el origen y posiblemente las propiedades de la fuente. Cualquier ventana (incluyendo, por ejemplo, http://evil.example.com ) puede enviar un mensaje a cualquier otro ventana, y no tiene garantías de que un remitente desconocido no enviará mensajes maliciosos. Sin embargo, una vez verificada la identidad, siempre debe verificar la sintaxis del mensaje recibido. De lo contrario, un agujero de seguridad en el sitio en el que confió para enviar solo mensajes confiables entonces podría abrir un agujero de secuencias de comandos entre sitios en su sitio".

Así es como se ve la función de escucha de mensajes de los padres:

 uri = 'https://www.somedomain.com/'; window.addEventListener("message", function(event) { if (event.origin !== uri.base.slice(0, -1)) return; if (event.source.location.origin !== uri.base.slice(0, -1)) return; if (event.source.location.origin !== window.location.origin) return; console.log(event.data); });

La llamada postMessage del iframe secundario:

 uri = 'https://www.somedomain.com/'; eventData = {'type':'sometype','action':'someaction','id':'q12wucxdfgbvgfcvt'}; parent.postMessage(eventData, uri.slice(0, -1));

¿Son suficientes las comprobaciones en la función de escucha? ¿O demasiados?

Gracias

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Demasiado. Si se marca de forma síncrona, event.source.location.origin == event.origin siempre será verdadero. Esto significa que las primeras 2 condiciones son engañosas. Con la tercera condición, dice efectivamente "Solo trato con el mismo mensaje de origen, y ese origen debe ser 'https://www.somedomain.com'".

Por lo tanto, se puede reducir a: event.origin == window.location.origin && event.origin == "https://www.somedomain.com"

Ahora estoy un poco confundido acerca de tu verdadera intención. 🤔

Si sabe de antemano que su página está alojada en "https://www.somedomain.com" , entonces no tiene que verificarla en absoluto, solo necesita verificar event.origin == window.location.origin .

Si sabe de antemano que el origen no es, entonces el cheque nunca pasará.

El único escenario en el que verificar "https://www.somedomain.com" literalmente tiene algún sentido es cuando implementa el mismo script en dos orígenes diferentes y desea que la condición sea verdadera en un lado pero falsa en el otro. Pero dudo que esto sea lo que realmente quieres.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda