Una página tiene contenido mixto cuando su HTML inicial se carga a través de una conexión HTTPS segura, pero otros recursos (como imágenes, videos, hojas de estilo y secuencias de comandos) se cargan a través de una conexión HTTP no segura. El nombre hace referencia a la combinación de contenido HTTP y HTTPS en una sola página.
Solicitar subrecursos con el protocolo HTTP no seguro debilita la seguridad de la página, ya que estas solicitudes son vulnerables a los ataques en la ruta, en los que un atacante escucha una conexión de red y ve o modifica la comunicación entre dos partes. Con estos recursos, los atacantes pueden hacer un seguimiento de los usuarios y reemplazar el contenido de un sitio web. En el caso del contenido mixto activo, pueden tomar el control total de la página, no solo de los recursos no seguros.
Si bien muchos navegadores informan advertencias de contenido mixto al usuario, el informe a menudo es demasiado tarde: las solicitudes no seguras ya se realizaron y la seguridad de la página está comprometida.
La mayoría de los navegadores ahora bloquean el contenido mixto por motivos de seguridad. Cambia las solicitudes de contenido no seguro a contenido seguro para garantizar que tu página siga cargándose correctamente.
Los dos tipos de contenido mixto
Existen dos tipos de contenido mixto: activo y pasivo.
El contenido mixto pasivo, incluidas las imágenes, los videos y el audio, no interactúa con el resto de la página, por lo que un ataque de intermediario se ve restringido en lo que puede hacer si intercepta o cambia ese contenido.
El contenido mixto activo interactúa con la página en su totalidad. Esto incluye secuencias de comandos, hojas de estilo, iframes y cualquier otro código que el navegador pueda descargar y ejecutar. Los ataques al contenido mixto activo permiten que un atacante haga casi cualquier cosa con la página.
Contenido mixto pasivo
El contenido mixto pasivo es menos riesgoso que el activo, pero el riesgo sigue existiendo. Por ejemplo, un atacante puede hacer lo siguiente:
- Intercepta las solicitudes HTTP de imágenes en tu sitio y cambia o reemplaza esas imágenes.
- Reemplaza las imágenes de los botones para que los usuarios las confundan y, por ejemplo, borran el contenido que querían guardar.
- Reemplazan las imágenes de tu sitio por contenido pornográfico.
- Reemplaza las imágenes de tus productos por anuncios de otros productos.
Incluso si el atacante no cambia el contenido de tu sitio, puede hacer un seguimiento de los usuarios a través de solicitudes de contenido mixto. También pueden indicar qué páginas visita un usuario y qué productos ve en función de las imágenes o de otros recursos que carga el navegador.
Si hay contenido mixto pasivo, la mayoría de los navegadores indican en la barra de direcciones que la página no es segura, incluso cuando la página se carga a través de HTTPS. Puedes observar este comportamiento en esta demo.
Hasta hace poco, el contenido mixto pasivo se cargaba en todos los navegadores, ya que bloquearlo habría dañado muchos sitios web. Esto ahora comienza a cambiar, por lo que es fundamental actualizar cualquier instancia de contenido mixto en tu sitio.
En algunos casos, Chrome actualiza automáticamente el contenido mixto pasivo. Esto significa que, si un recurso se codificó de forma fija como HTTP, pero está disponible a través de HTTPS, el navegador carga la versión HTTPS. Si no hay una versión segura, el recurso no se carga.
Cada vez que Chrome detecta contenido mixto o actualiza automáticamente el contenido mixto pasivo, registra mensajes detallados en la pestaña Problemas de DevTools para aconsejarte sobre cómo corregir el problema específico.

Contenido mixto activo
El contenido mixto activo representa una amenaza mayor que el contenido mixto pasivo. Un atacante puede interceptar y reescribir el contenido activo para tomar el control total de tu página o incluso de todo tu sitio web. Esto les permite cambiar cualquier aspecto de la página, como mostrar contenido diferente, robar contraseñas de los usuarios o otras credenciales de acceso, robar cookies de sesión de los usuarios o redireccionarlos a un sitio completamente diferente.
Debido a que los riesgos del contenido mixto activo son muy altos, la mayoría de los navegadores ya bloquean este tipo de contenido de forma predeterminada para proteger a los usuarios, pero el comportamiento varía entre los proveedores y las versiones de los navegadores.
En esta demo, se muestran ejemplos de contenido mixto activo. Carga el ejemplo a través de HTTP para ver el contenido que se bloquea cuando cargas el ejemplo a través de HTTPS. El contenido bloqueado también se detalla en la pestaña Problemas de DevTools.

La especificación de contenido mixto
Los navegadores siguen la especificación de contenido mixto, que define las categorías de contenido bloqueable de forma opcional y contenido bloqueable.
Un recurso califica como contenido opcionalmente bloqueable "cuando el riesgo de permitir su uso como contenido mixto supera el riesgo de dañar partes significativas de la Web". Este es un subconjunto del contenido mixto pasivo.
Todo el contenido mixto que no sea opcionalmente bloqueable se considera bloqueable y el navegador debe bloquearlo.
En los últimos años, el uso de HTTPS aumentó de forma significativa y se convirtió en la opción predeterminada en la Web. Esto hace que ahora sea más factible para los navegadores considerar bloquear todo el contenido mixto, incluso los tipos de subrecursos definidos en la especificación de contenido mixto como opcionalmente bloqueables.
Navegadores más antiguos
Es posible que algunos visitantes usen navegadores más antiguos. Las diferentes versiones de navegadores de diferentes proveedores tratan el contenido mixto de manera diferente. En el peor de los casos, los navegadores y las versiones más antiguos no bloquean ningún contenido mixto, lo que no es seguro para el usuario.
Si cargas todos tus recursos de forma segura y solucionas los problemas de contenido mixto, te aseguras de que tu contenido sea visible y proteges a los usuarios del contenido peligroso que los navegadores más antiguos podrían no bloquear.