← Todos los checks
SeguridadSeveridad típica: Bajo

Cabeceras de aislamiento de origen

Comprueba si faltan las cabeceras COOP y CORP que aíslan tu web frente a ataques cross-origin.

Qué comprueba

Este escáner comprueba si a tu web le faltan las cabeceras de aislamiento de origen COOP y CORP. Detecta la ausencia de estas cabeceras que separan tu página de otros orígenes en el navegador.

Por qué importa

Sin estas cabeceras, tu página queda más expuesta a ciertos ataques cross-origin en los que otro sitio intenta interactuar con la tuya o leer datos que no debería. El aislamiento de origen es una capa extra de protección que reduce ese tipo de riesgos.

Cómo se arregla

Añade las cabeceras Cross-Origin-Opener-Policy y Cross-Origin-Resource-Policy en la configuración de tu servidor o CDN. Empieza con valores conservadores y comprueba que tus recursos e integraciones siguen funcionando antes de endurecerlos.

Cómo funciona esta comprobación

Scanaris mira en la respuesta principal de tu página si están presentes dos cabeceras: Cross-Origin-Opener-Policy (COOP) y Cross-Origin-Resource-Policy (CORP). Si falta una o las dos, abre un único hallazgo de severidad baja indicando cuáles. No evalúa el valor, solo la presencia. Son las dos cabeceras de aislamiento de origen más sencillas de adoptar; la tercera de la familia, Cross-Origin-Embedder-Policy, no se exige porque rompe cualquier recurso de terceros que no coopere y rara vez compensa en una web normal.

Qué protege cada una

COOP decide si tu ventana comparte "grupo de contexto" con la que la abrió o con las que abres tú. Con same-origin, una página de otro dominio que abra la tuya con window.open deja de tener una referencia utilizable a ella (y al revés), lo que corta ataques de manipulación entre pestañas y cierra la vía por la que se explotan las fugas de memoria tipo Spectre. CORP decide quién puede incrustar tus recursos. Con same-origin, otro sitio no puede cargar tus imágenes, scripts o fuentes con una etiqueta <img> o <script> aunque las URL sean públicas: el navegador bloquea la respuesta antes de que llegue a ese sitio. Ninguna de las dos arregla un fallo existente; son defensa en profundidad, y por eso su ausencia es de severidad baja.

Cómo añadirlas

Valores recomendados para una web que no comparte recursos con otros dominios:

Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Resource-Policy: same-origin
  • Nuxt: en routeRules de nuxt.config, en la regla '/**', junto al resto de cabeceras.
  • Next.js: en la función headers() de next.config.js.
  • Vercel: en vercel.json, sección headers. Netlify: en _headers, bajo /*.
  • nginx: dos líneas add_header ... always; en el bloque server. Apache: Header always set en el VirtualHost.
  • Express: helmet() las añade por defecto en versiones recientes; comprueba la versión que tienes instalada.

Antes de activarlas, dos comprobaciones

  • Logins con ventana emergente. Si usas "Iniciar sesión con Google" u otro proveedor en modo popup, la ventana necesita hablar con la que la abrió. Con same-origin deja de funcionar; usa same-origin-allow-popups, que mantiene la protección y permite ese caso.
  • Recursos que sirves a otros dominios. Si tus imágenes o fuentes se cargan desde otro sitio tuyo (un blog en otro dominio, un widget que incrustan terceros), same-origin las bloqueará allí. Usa same-site si el otro sitio es un subdominio, o cross-origin en las rutas concretas de esos recursos.

Comprueba que está arreglado

curl -sI https://tudominio.com | grep -iE "^cross-origin-(opener|resource)-policy:"

Deben salir las dos líneas. Después abre tu web, prueba el login y cualquier integración con popup, y revisa la consola del navegador: un recurso bloqueado por CORP aparece ahí con un mensaje explícito.

Preguntas frecuentes

¿Esto sustituye a CORS?

No, son complementarios y van en direcciones opuestas. CORS abre tus respuestas a orígenes concretos cuando hace falta; CORP las cierra por defecto a quien quiera incrustarlas. Puedes tener CORP same-origin en toda la web y CORS abierto en una ruta de API.

¿Necesito también Cross-Origin-Embedder-Policy?

Solo si quieres SharedArrayBuffer o temporizadores de alta precisión (edición de vídeo, emuladores, algunas apps WebAssembly). COEP exige que todo lo que incrustes lleve CORP o CORS, y la mayoría de scripts de terceros no lo hacen. Para una web corriente, COOP y CORP bastan.

¿Cuánto mejora la nota?

Poco en puntos, porque es un hallazgo de severidad baja; pero es de las pocas mejoras que no tienen efectos secundarios si haces las dos comprobaciones de arriba. El resto de cabeceras que sí pesan están en cabeceras de seguridad y las explica cabeceras HTTP para humanos.

Compruébalo en tu web

Escanea tu web gratis y mira si este y otros 44 checks pasan, con un prompt de arreglo por cada fallo.

Escanear mi web gratis

Del blog

Checks relacionados