Saltar al contenido

Cargar algo que no es tuyo

Por qué una ventana con contenido remoto es un problema distinto de todo lo anterior: hereda las capabilities de su ventana y no obedece tu política. Los cuatro casos reales y la regla que los ordena.

Por qué es distinto

Dos hechos, y de ellos sale todo lo demás:

El contenido remoto tiene su propio origen. Lo dijo el nivel 31.3: su almacenamiento es el de ese sitio, sus cookies son las de ese sitio, y tu política de contenido no lo gobierna — la política se aplica a tu origen, no al suyo. Si esa página trae la suya, es la suya; si no trae ninguna, no hay ninguna.

Y las capabilities se conceden por ventana. Es lo del nivel 27.2: una capability lista las ventanas donde vale. Si la ventana que carga contenido remoto está en esa lista, ese contenido puede llamar a esos comandos. No hay una capa intermedia que distinga «esto lo pidió mi código» de «esto lo pidió la página cargada».

La regla

Una sola, y resuelve el noventa por ciento:

El contenido remoto va en una ventana que no aparece en ninguna capability.

Ni una. Ninguna capability la lista, así que esa ventana no puede llamar a nada: puede pintar, puede navegar dentro de sí misma, y no tiene puente. Con eso, el peor caso de un sitio remoto comprometido es que muestre algo raro dentro de un recuadro.

Y la consecuencia práctica: si esa ventana necesita comunicarse con tu aplicación, la comunicación la medias tú, con un canal explícito y un formato que tú validas. No con acceso al puente.

Los cuatro casos

Fíjate en que dos de los cuatro se resuelven sacándolo al navegador del sistema. Es la respuesta más frecuente y la que más se olvida: si el contenido no necesita estar dentro, no lo metas dentro. El usuario gana la barra de direcciones, su sesión y sus extensiones, y tú pierdes un problema.

Lo que se pierde

Ser honesto con el precio, que existe:

  • Una ventana sin capabilities no puede pedirte nada. Si el flujo necesita que la página remota devuelva un resultado, hay que mediarlo, y mediarlo es trabajo.
  • El navegador del sistema rompe la sensación de aplicación. El usuario sale de tu ventana. Para autenticación es lo correcto y está aceptado; para otras cosas puede chirriar.
  • Y limpiar contenido del usuario nunca es perfecto. El nivel 32.3 lo trata, y la conclusión es que se hace con una librería que otros mantienen, nunca a mano.