Contenido Mixto HTTP/HTTPS: Guia Completa

El contenido mixto ocurre cuando una pagina servida por HTTPS carga recursos a traves de HTTP inseguro. Esto rompe la cadena de seguridad: aunque la pagina principal esta cifrada, los recursos no cifrados pueden ser interceptados o modificados por atacantes. Los navegadores modernos bloquean el contenido mixto activo y muestran advertencias para el pasivo, degradando la experiencia del usuario y la confianza en tu sitio.

Estadisticas en tiempo real

68%

Tasa de aprobacion

229

Sitios analizados

74/100

Puntuacion media

Datos basados en escaneos reales de EscanearVulnerabilidades

Que es

El contenido mixto se produce cuando una pagina web cargada mediante HTTPS incluye recursos (scripts, estilos, imagenes, iframes, fonts, etc.) que se solicitan mediante HTTP sin cifrar. Existen dos tipos: contenido mixto activo y pasivo. El contenido mixto activo incluye recursos que pueden modificar el DOM de la pagina, como scripts JavaScript, hojas de estilo CSS, iframes y objetos Flash. Este tipo es especialmente peligroso porque un atacante que intercepte la conexion puede inyectar codigo malicioso. El contenido mixto pasivo incluye recursos que no pueden modificar la pagina, como imagenes, audio y video, pero que igualmente pueden ser interceptados o reemplazados.

Por que importa

El contenido mixto activo es un riesgo de seguridad critico. Un atacante que realice un ataque man-in-the-middle puede reemplazar un archivo JavaScript cargado por HTTP con codigo malicioso, obteniendo control total sobre la pagina HTTPS. Puede robar credenciales, redirigir al usuario, instalar malware o modificar el contenido de la pagina. Los navegadores modernos bloquean automaticamente el contenido mixto activo, lo que puede romper funcionalidades de tu sitio. El contenido mixto pasivo, aunque menos peligroso, permite a un atacante rastrear la actividad del usuario o reemplazar imagenes con contenido inapropiado. Ademas, cualquier contenido mixto impide que el navegador muestre el candado de seguridad.

Problemas comunes

  • URLs absolutas con HTTP hardcodeadas: referencias a recursos usando http:// en el HTML, CSS o JavaScript, en lugar de HTTPS o URLs relativas al protocolo.

  • Recursos de terceros sin HTTPS: cargar scripts, fonts o imagenes desde CDNs o servicios externos que no soportan HTTPS.

  • CSS con referencias HTTP: hojas de estilo que importan fuentes, imagenes de fondo u otras hojas de estilo mediante HTTP.

  • Contenido generado por el CMS con HTTP: editores WYSIWYG que insertan URLs absolutas con HTTP en el contenido almacenado en la base de datos.

  • APIs y endpoints HTTP: llamadas AJAX o fetch a APIs internas o externas que usan HTTP en lugar de HTTPS.

  • Iframes con contenido HTTP: widgets, formularios de terceros o contenido embebido que se carga sin cifrar.

Como solucionarlo

Realiza una auditoria completa de tu sitio web para identificar todos los recursos cargados por HTTP. Usa las herramientas de desarrollo del navegador (pestaƱa Console y Network) para detectar contenido mixto. Cambia todas las URLs de http:// a https:// o usa URLs relativas al protocolo (//dominio.com/recurso). Para contenido en base de datos, realiza un buscar y reemplazar de http:// a https://. Configura la cabecera CSP upgrade-insecure-requests para que el navegador actualice automaticamente las peticiones HTTP a HTTPS. Verifica que todos los servicios de terceros que usas soporten HTTPS.

html Ejemplo de configuracion
<!-- CSP para actualizar automaticamente peticiones inseguras -->
<meta http-equiv="Content-Security-Policy"
      content="upgrade-insecure-requests">

<!-- Nginx - Cabecera CSP -->
add_header Content-Security-Policy "upgrade-insecure-requests" always;

<!-- URLs relativas al protocolo (no recomendado para enlace externo) -->
<script src="//cdn.example.com/script.js"></script>

<!-- Mejor: siempre usar HTTPS explicito -->
<script src="https://cdn.example.com/script.js"></script>

# WordPress - Buscar y reemplazar en base de datos
# Usando WP-CLI:
wp search-replace 'http://tudominio.com' 'https://tudominio.com' --all-tables

# SQL directo (hacer backup primero):
UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://tudominio.com', 'https://tudominio.com');
UPDATE wp_options SET option_value = REPLACE(option_value, 'http://tudominio.com', 'https://tudominio.com');

Comprueba la seguridad de tu sitio web

Nuestro escaner analiza automaticamente la configuracion de contenido mixto http/https junto con otros 9 checks de seguridad. Recibe un informe completo con recomendaciones en minutos.

Escanea tu sitio web gratis

Guias relacionadas