Verificare la sicurezza del sito senza hackerare nulla
Controlli di sicurezza passivi per e-commerce: scadenza certificato TLS, HSTS, CSP, nosniff, cookie, contenuti misti, jQuery obsoleto, security.txt e DMARC.
Redazione FixReports11 min di lettura
Puoi verificare dall’esterno buona parte della configurazione di sicurezza di un negozio online leggendo ciò che il sito invia già a ogni visitatore: il certificato TLS, i reindirizzamenti, gli header delle risposte HTTP, i cookie, gli script che carica e i record DNS pubblici. Questi controlli passivi non inviano traffico di attacco e non richiedono alcun login, quindi non pesano sul negozio più di una normale visita. Individuano lacune di configurazione come un certificato in scadenza, l’assenza di HSTS, cookie non sicuri, contenuti misti o una versione di jQuery con vulnerabilità note. Non sono un penetration test e non possono dimostrare che un negozio sia sicuro.
Punti chiave
- I certificati TLS pubblicamente attendibili emessi dal 15 marzo 2026 possono essere validi al massimo 200 giorni, limite che scende a 100 giorni a marzo 2027 e a 47 giorni a marzo 2029 (CA/Browser Forum (si apre in una nuova scheda)).
- I browser ignorano l’header HSTS quando viene inviato su HTTP semplice (MDN (si apre in una nuova scheda)).
- La direttiva CSP
frame-ancestorsnon funziona in un tag<meta>: deve essere inviata come header di risposta (MDN (si apre in una nuova scheda)). - Le versioni di jQuery precedenti alla 3.5.0 sono interessate da due vulnerabilità XSS, e il 23 gennaio 2025 la CISA ne ha aggiunta una, la CVE-2020-11023, al suo catalogo Known Exploited Vulnerabilities (NVD (si apre in una nuova scheda)).
- Un file
security.txtdeve contenere i campiContactedExpirese trovarsi in/.well-known/security.txt(RFC 9116 (si apre in una nuova scheda)).
Cosa si intende per controllo di sicurezza passivo?
Un controllo passivo si limita a leggere ciò che il sito o il suo DNS restituiscono a una normale richiesta.
Significa caricare le pagine pubbliche, leggere il certificato e gli header di risposta, elencare i cookie e gli script impostati da una pagina e interrogare i record DNS pubblici. Un controllo passivo non tenta di indovinare password, non invia payload di injection, non sonda gli URL di amministrazione e non esegue scansioni delle porte. Tutto ciò che segue si può fare con un browser, curl, openssl e dig.
Come si controllano il certificato TLS e la sua scadenza?
Leggi direttamente date e nomi del certificato e assicurati che il rinnovo sia automatico.
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates
Verifica che notAfter sia ben lontano nel futuro, che il certificato copra sia example.com sia www.example.com se li usi entrambi (il visualizzatore di certificati del browser elenca i nomi) e che il browser non mostri avvisi. La durata dei certificati si sta riducendo in base ai Baseline Requirements del CA/Browser Forum (sezione 6.3.2, versione 2.3.1 a ottobre 2026), a seguito del Ballot SC-081v3 (si apre in una nuova scheda), adottato l’11 aprile 2025:
| Certificato emesso | Validità massima |
|---|---|
| Prima del 15 marzo 2026 | 398 giorni |
| Dal 15 marzo 2026 al 14 marzo 2027 | 200 giorni |
| Dal 15 marzo 2027 al 14 marzo 2029 | 100 giorni |
| Dal 15 marzo 2029 | 47 giorni |
Con durate così brevi il rinnovo manuale diventa rischioso, quindi verifica che il tuo hosting o il tuo strumento per i certificati esegua il rinnovo in automatico. Verifica anche che l’HTTP semplice reindirizzi a HTTPS:
curl -sI http://example.com/ | grep -i -E "^HTTP|^location"
Ti serve una risposta 301 (o 308) con un header location che inizi con https://.
Quali header di sicurezza dovrebbe inviare un negozio online?
Un piccolo insieme di header di risposta blocca gli attacchi più comuni lato browser a un costo quasi nullo.
| Header | Cosa fa | Valore tipico | Fonte |
|---|---|---|---|
Strict-Transport-Security | Dice ai browser di usare solo HTTPS e impedisce agli utenti di ignorare gli errori del certificato | max-age=31536000; includeSubDomains | MDN (si apre in una nuova scheda) |
Content-Security-Policy: frame-ancestors | Controlla quali siti possono incorporare le tue pagine, proteggendo dal clickjacking | frame-ancestors 'self' | MDN (si apre in una nuova scheda) |
X-Frame-Options | Controllo del framing più vecchio; secondo OWASP, nei browser che supportano frame-ancestors è quest’ultimo a renderlo obsoleto | DENY o SAMEORIGIN | OWASP (si apre in una nuova scheda) |
X-Content-Type-Options | Impedisce il MIME sniffing e blocca script e fogli di stile serviti con il tipo sbagliato | nosniff | MDN (si apre in una nuova scheda) |
Referrer-Policy | Limita quanta parte dei tuoi URL viene inviata ad altri siti | strict-origin-when-cross-origin | OWASP |
X-XSS-Protection | Header del filtro XSS dei browser; secondo OWASP può creare vulnerabilità XSS in siti altrimenti sicuri | Non impostarlo, oppure 0 | OWASP |
Controlla cosa invia il tuo negozio:
curl -sI https://example.com/
Strict-Transport-Security: max-age=31536000; includeSubDomains
Content-Security-Policy: frame-ancestors 'self'
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Due avvertenze. includeSubDomains blocca qualsiasi sottodominio che funziona solo su HTTP, quindi controlla prima i sottodomini. Il preload HSTS richiede un max-age di almeno 31536000 e includeSubDomains, quindi aggiungi preload solo quando tutti i sottodomini sono pronti per HTTPS. Una CSP completa che limita gli script vale la pena di averla, ma OWASP fa notare che è complessa da configurare e mantenere, e i negozi con molte app devono testarla con attenzione.
I tuoi cookie sono impostati con Secure, HttpOnly e SameSite?
I cookie di sessione e del carrello dovrebbero avere tutti e tre gli attributi, e puoi vederli negli header di risposta Set-Cookie.
| Attributo | Effetto (secondo MDN (si apre in una nuova scheda)) | Dove conta |
|---|---|---|
Secure | Inviato solo su HTTPS; i siti su HTTP semplice non possono impostarlo | Ogni cookie di un negozio su HTTPS |
HttpOnly | JavaScript non può leggerlo tramite document.cookie, il che aiuta contro gli attacchi XSS | Sessioni di login e carrelli |
SameSite=Lax o Strict | Limita i casi in cui il cookie viene inviato nelle richieste cross-site | Sessioni; Strict è adatto ai cookie di autenticazione e del carrello |
SameSite=None | Inviato nelle richieste cross-site; deve essere combinato con Secure | Solo le funzionalità di terze parti incorporate che ne hanno bisogno |
Se l’attributo SameSite non è impostato, i browser trattano il cookie come Lax. I cookie che i tuoi script devono leggere non possono essere HttpOnly, quindi concentrati su quelli che identificano un cliente che ha effettuato l’accesso o un amministratore.
curl -sI https://example.com/ | grep -i "^set-cookie"
Gli strumenti per sviluppatori del browser mostrano le stesse informazioni, compresi i cookie impostati dagli script dopo il caricamento della pagina.
Come si trovano i contenuti misti?
Per contenuto misto (mixed content) si intende qualsiasi risorsa caricata su HTTP in una pagina servita su HTTPS, e la console del browser lo elenca.
MDN (si apre in una nuova scheda) lo divide in due gruppi. Immagini, audio e video sono “aggiornabili” (upgradable): i browser li richiedono automaticamente su HTTPS. Script, fogli di stile, iframe, font e richieste fetch() sono “bloccabili” (blockable): i browser li bloccano, e smette di funzionare tutto ciò che ne dipendeva. Vengono bloccate anche le richieste aggiornate verso un semplice indirizzo IP.
Per trovarlo, apri la console sui template principali (home page, collezione, prodotto, carrello) e cerca http:// nel codice del tema, nei contenuti delle pagine e nelle impostazioni delle app. Il centro assistenza di Shopify spiega che qualsiasi pagina del negozio con una risorsa non distribuita su HTTPS è considerata non sicura (si apre in una nuova scheda) e consiglia di ospitare le risorse su Shopify o di servirle su HTTPS. Su WooCommerce, se il sito è mai stato su http://, controlla i contenuti dei vecchi articoli e le opzioni del tema.
Come si individuano le librerie JavaScript obsolete con CVE note?
Elenca le librerie caricate da ogni pagina, leggine le versioni e confrontale con il National Vulnerability Database.
Inizia da jQuery. Nella console del browser, $.fn.jquery restituisce la versione caricata (jQuery API (si apre in una nuova scheda)). Le versioni da segnalare:
| CVE | Versioni interessate | Problema | Punteggio NVD (v3.1) |
|---|---|---|---|
| CVE-2020-11022 (si apre in una nuova scheda) | Dalla 1.12.0 a prima della 3.5.0 | Passare HTML non attendibile a metodi come .html() o .append() può eseguire codice | 6,1 (Medium) |
| CVE-2020-11023 (si apre in una nuova scheda) | Dalla 1.0.3 a prima della 3.5.0 | Come sopra, per HTML che contiene elementi <option>; nel catalogo KEV della CISA dal 23 gennaio 2025 | 6,1 (Medium) |
| CVE-2019-11358 (si apre in una nuova scheda) | Prima della 3.4.0 | Prototype pollution tramite jQuery.extend(true, ...) | 6,1 (Medium) |
Entrambi i problemi del 2020 sono stati corretti in jQuery 3.5.0. Una versione vulnerabile significa che il codice difettoso è presente; se possa essere sfruttato dipende da come il sito gli passa i dati. WordPress include jQuery 3.5.1 dalla versione 5.6 (si apre in una nuova scheda), quindi un jQuery vecchio su un negozio WooCommerce indica un WordPress non aggiornato oppure un tema o un plugin che carica una propria copia. Su Shopify, controlla i file del tema e le app che iniettano script.
Che cos’è security.txt e serve al tuo negozio?
È un file di testo semplice che spiega ai ricercatori di sicurezza come segnalarti una vulnerabilità.
La RFC 9116 (si apre in una nuova scheda) (aprile 2022, una RFC di tipo Informational, quindi seguirla è facoltativo) stabilisce che il file deve essere servito su HTTPS in /.well-known/security.txt come text/plain. Contact ed Expires sono obbligatori, e la RFC raccomanda una data Expires a meno di un anno di distanza.
Contact: mailto:security@example.com
Expires: 2027-09-30T23:00:00.000Z
Preferred-Languages: en
Policy: https://example.com/security-policy
Su WooCommerce puoi caricare il file sul tuo server. Su una piattaforma in hosting gestito, verifica se puoi pubblicare un file in quel percorso; in caso contrario, un contatto per la sicurezza chiaramente indicato nella pagina dei contatti è comunque utile.
Come protegge DMARC il tuo negozio dallo spoofing delle email?
DMARC ti permette di chiedere ai provider di posta di mettere in quarantena o rifiutare le email che usano il tuo dominio nell’indirizzo From senza superare SPF o DKIM allineati.
Un record con p=none raccoglie solo i report; non blocca la posta falsificata. I clienti si aspettano conferme d’ordine e reimpostazioni della password dal tuo dominio, quindi vale la pena bloccare un messaggio di phishing che mostra esattamente il tuo dominio. Controlla la tua policy con dig +short TXT _dmarc.example.com e consulta la RFC 9989 (si apre in una nuova scheda) per la specifica. DMARC non copre i domini simili (lookalike), ma solo il dominio che pubblica il record.
Cosa gestisce Shopify e cosa controlli tu su WooCommerce?
Shopify gestisce i server dietro i suoi negozi, mentre un negozio WooCommerce in self-hosting lascia le impostazioni del server a te e al tuo hosting.
| Controllo | Shopify | WooCommerce (self-hosted) |
|---|---|---|
| Certificato TLS | Gratuito per tutti i domini aggiunti a Shopify (si apre in una nuova scheda); per i domini di terze parti possono servire fino a 48 ore | Il tuo hosting o una tua configurazione |
| Reindirizzamento da HTTP a HTTPS | Piattaforma | Impostazioni del server web, della CDN o dell’hosting |
| Header di sicurezza | Inviati dai server di Shopify | Server web, CDN o un plugin |
| Flag dei cookie | I cookie propri di Shopify sono impostati dalla piattaforma; quelli di app e tema sono responsabilità tua | Core di WordPress, plugin e server |
| Contenuti misti e librerie JS | Il tuo tema, i tuoi contenuti e le tue app | Il tuo tema, i tuoi contenuti e i tuoi plugin |
| security.txt e DMARC | Il tuo dominio e il tuo DNS | Il tuo dominio e il tuo DNS |
Quando a ottobre 2026 abbiamo controllato diversi negozi ospitati su Shopify, le loro risposte includevano HSTS con un max-age di circa 91 giorni, X-Content-Type-Options: nosniff e una CSP con upgrade-insecure-requests, mentre frame-ancestors variava da negozio a negozio. Shopify dichiara di avere la certificazione di conformità PCI DSS di livello 1 (si apre in una nuova scheda). Il tema e le app installate restano una tua responsabilità.
Su WooCommerce, la guida all’hardening (si apre in una nuova scheda) di WordPress raccomanda di mantenere aggiornati WordPress e i plugin, eliminare i plugin che non usi e chiedere al tuo hosting quali precauzioni di sicurezza adotta.
Perché questo non è un penetration test?
Un penetration test tenta attivamente degli attacchi; i controlli passivi si limitano a osservare.
La NIST SP 800-115 definisce il penetration test come un test di sicurezza in cui i valutatori imitano attacchi reali per trovare modi di aggirare le funzioni di sicurezza di un sistema (glossario NIST (si apre in una nuova scheda)). I controlli passivi non possono vedere difetti lato server nei plugin, password di amministrazione deboli o riutilizzate, l’assenza dell’autenticazione a due fattori, controlli di accesso difettosi o codice vulnerabile che non compare mai nel sorgente della pagina. Usali come base di riferimento da ripetere in qualsiasi momento. Per garanzie più approfondite, commissiona un penetration test con un perimetro definito per iscritto, su sistemi di tua proprietà o che sei autorizzato a testare.
Una scansione gratuita esegue un primo controllo del tuo negozio. Il report sulla sicurezza del sito copre i controlli passivi di questo articolo, da TLS e reindirizzamenti fino a header, cookie, contenuti misti, librerie obsolete, security.txt e DMARC, con le correzioni per ogni problema rilevato. Come qualsiasi verifica passiva, non può garantire che un negozio sia sicuro.
Domande frequenti
I controlli di sicurezza passivi mettono a rischio il mio negozio?
Non più di una normale visita. Richiedono le stesse pagine pubbliche e gli stessi record DNS che richiederebbe qualsiasi browser o server di posta, e non tentano di effettuare l’accesso né di inviare payload di attacco.
Posso aggiungere header di sicurezza su Shopify?
Gli header di risposta del negozio provengono dai server di Shopify, quindi se ne manca uno che ti serve contatta l’assistenza di Shopify. Un tag CSP <meta> nel tema può aggiungere alcune direttive, ma MDN fa notare che frame-ancestors non è supportata in <meta>.
Una vecchia versione di jQuery significa che il mio negozio è stato hackerato?
No. Significa che viene caricato codice con vulnerabilità note, il che aumenta il rischio se il sito passa HTML non attendibile ai metodi interessati. Aggiornalo, oppure rimuovi il tema o il plugin che lo carica.
Per quanto tempo può essere valido oggi un certificato TLS?
I certificati pubblicamente attendibili emessi dal 15 marzo 2026 possono essere validi al massimo 200 giorni. Il limite scende a 100 giorni dal 15 marzo 2027 e a 47 giorni dal 15 marzo 2029.
Il file security.txt è obbligatorio?
La RFC 9116 è una RFC di tipo Informational, quindi secondo lo standard pubblicare il file è facoltativo. Pubblicarlo costa poco e offre ai ricercatori un modo chiaro per contattarti.
Una scansione passiva senza problemi significa che il mio negozio è sicuro?
No. Mostra che la configurazione pubblica sembra corretta. Vulnerabilità lato server, sicurezza degli account e difetti nella logica di business richiedono altri test.
Fonti
- Baseline Requirements for the Issuance and Management of Publicly-Trusted TLS Server Certificates, version 2.3.1 (si apre in una nuova scheda), CA/Browser Forum, 4 ottobre 2026
- Ballot SC-081v3: Introduce Schedule of Reducing Validity and Data Reuse Periods (si apre in una nuova scheda), CA/Browser Forum, 11 aprile 2025
- Strict-Transport-Security (si apre in una nuova scheda), MDN Web Docs, ultima modifica l’11 settembre 2026
- CSP: frame-ancestors (si apre in una nuova scheda), MDN Web Docs, ultima modifica il 27 agosto 2026
- X-Content-Type-Options (si apre in una nuova scheda), MDN Web Docs, ultima modifica il 17 marzo 2026
- Using HTTP cookies (si apre in una nuova scheda), MDN Web Docs, ultima modifica il 17 settembre 2026
- Mixed content (si apre in una nuova scheda), MDN Web Docs, ultima modifica il 15 agosto 2026
- HTTP Security Response Headers Cheat Sheet (si apre in una nuova scheda), OWASP Cheat Sheet Series, consultato il 22 ottobre 2026
- CVE-2020-11022 (si apre in una nuova scheda), NIST National Vulnerability Database, pubblicato il 29 aprile 2020
- CVE-2020-11023 (si apre in una nuova scheda), NIST National Vulnerability Database, pubblicato il 29 aprile 2020
- CVE-2019-11358 (si apre in una nuova scheda), NIST National Vulnerability Database, pubblicato il 20 aprile 2019
- .jquery (si apre in una nuova scheda), jQuery API Documentation, consultato il 22 ottobre 2026
- Updating core jQuery to version 3, part 2 (si apre in una nuova scheda), Make WordPress Core, 5 novembre 2020
- RFC 9116: A File Format to Aid in Security Vulnerability Disclosure (si apre in una nuova scheda), IETF, aprile 2022
- RFC 9989: Domain-Based Message Authentication, Reporting, and Conformance (DMARC) (si apre in una nuova scheda), IETF, maggio 2026
- Enabling secure connections to your Shopify store (si apre in una nuova scheda), Shopify Help Center, consultato il 22 ottobre 2026
- Security (si apre in una nuova scheda), Shopify, consultato il 22 ottobre 2026
- Hardening WordPress (si apre in una nuova scheda), WordPress Developer Resources, consultato il 22 ottobre 2026
- Penetration testing (glossary) (si apre in una nuova scheda), NIST Computer Security Resource Center, che cita la NIST SP 800-115 (settembre 2008), consultato il 22 ottobre 2026
Tutte le guide
- Checklist pagina prodotto: cosa blocca gli acquisti onlineChecklist della pagina prodotto dalle ricerche Baymard e WebAIM: prezzo, spedizioni e resi, foto, recensioni, carrello da mobile, pop-up, ricerca, tastiera.
- Checklist SEO tecnica per e-commerce: Shopify e WooCommerceControlli di SEO tecnica per negozi Shopify e WooCommerce: noindex, robots.txt, sitemap, title, H1, canonical, dati strutturati Product, Open Graph e alt.
- Core Web Vitals per e-commerce: LCP, INP e CLS spiegatiCosa misurano LCP, INP e CLS, le soglie buone e scadenti al 75° percentile, dati di laboratorio e sul campo, e le correzioni tipiche su Shopify e WooCommerce.