Cos'è il Mixed Content
Il Mixed Content si verifica quando una pagina caricata via HTTPS include risorse (immagini, script, CSS, iframe, font) servite via HTTP. Il browser, riconoscendo la combinazione insicura, mostra il classico avviso nella barra degli indirizzi (lucchetto giallo, lucchetto barrato, o nessun lucchetto) e nei casi più gravi blocca proprio il caricamento delle risorse.
Tipi di mixed content
- Passive (Display) Mixed Content: immagini, video e audio HTTP dentro pagine HTTPS. Vengono caricate ma generano un warning visibile
- Active (Script) Mixed Content: script, CSS, iframe, XHR, fetch via HTTP. I browser moderni li BLOCCANO automaticamente perché un'attaccante potrebbe modificarli
Dal 2020 in poi Chrome e Firefox hanno iniziato a bloccare anche il mixed content passivo, downgradando il lucchetto e in alcune versioni rifiutando completamente il caricamento.
Identificare le risorse miste
I metodi più efficaci per scovare mixed content:
- DevTools del browser: tab Console mostra messaggi tipo Mixed Content: The page at... was loaded over HTTPS, but requested an insecure...
- Tab Network: filtro per
http://nelle richieste - Strumenti online: whynopadlock.com, jitbit.com/sslcheck, missingpadlock.com
- Crawler automatico: tool come SSL Check o screamingfrog che scansionano l'intero sito
- Content-Security-Policy report-only: configurare CSP con report e ricevere notifiche su violazioni mixed
Sorgenti tipiche del problema
- URL assoluti hardcoded con
http://nei template - Riferimenti a CDN, font esterni o iframe di servizi terzi non aggiornati
- Editor WYSIWYG che inseriscono media via percorsi vecchi
- Plugin o temi WordPress non aggiornati per HTTPS
- Configurazioni proxy che riscrivono URL in HTTP
- Database popolato prima della migrazione, con URL legacy
Soluzione 1: Riscrittura del database
Per WordPress il modo più rapido è il Better Search Replace o il classico wp search-replace 'http://tuosito.it' 'https://tuosito.it' --all-tables. Per altre CMS l'approccio è simile: query SQL o script di migrazione che sostituiscano gli URL.
Soluzione 2: Protocol-relative URL
In passato era best practice usare URL del tipo //esempio.com/immagine.png, lasciando al browser la scelta del protocollo. Oggi è SCONSIGLIATO: meglio URL HTTPS espliciti che dichiarano l'intento. Usa // solo nei rari casi in cui devi mantenere compatibilità con vecchi sistemi che potrebbero funzionare anche in HTTP.
Soluzione 3: upgrade-insecure-requests
Direttiva CSP che istruisce il browser a riscrivere automaticamente tutte le richieste HTTP della pagina in HTTPS:
Content-Security-Policy: upgrade-insecure-requests
È una pezza utile durante la migrazione, ma non risolve risorse che non hanno HTTPS attivo. Va combinata con la pulizia del database.
Soluzione 4: Block-all-mixed-content
Versione più restrittiva: il browser blocca tutto il mixed content, anche quello passivo. Utile come check finale dopo la pulizia:
Content-Security-Policy: block-all-mixed-content
Best practice post-fix
- Esegui un crawl completo dopo ogni modifica importante
- Configura CSP con reporting per ricevere alert su nuove violazioni
- Mantieni un test automatico che verifica l'assenza di stringhe
http://nelle pagine principali - Aggiorna documentazione e template del team per evitare regressioni
- Verifica che le newsletter inviate non includano risorse HTTP
Hai bisogno di aiuto?
Se vuoi gestione SSL dal team di G Tech Group, scrivici tramite il modulo di contatto.