Il Suo sito web: https, HSTS e header di sicurezza
Modulo 4: E-mail, sito web e dominio · Tempo di lettura: 11 minuti
Obiettivo della lezione: Dopo questa lezione sarà in grado di verificare la sicurezza di base del Suo sito web: un certificato valido, il reindirizzamento a https, HSTS con un max-age corretto, i principali header di sicurezza e l'aggiornamento del Suo CMS.
Concetti chiave: certificato TLS, https, reindirizzamento a https, HSTS, max-age, includeSubDomains, preload, header HTTP, Content-Security-Policy, X-Content-Type-Options, frame-ancestors, X-Frame-Options, Referrer-Policy
Cosa succede quando qualcuno apre il Suo sito
Se un cliente digita example.com nella barra degli indirizzi, il browser richiede la pagina al Suo server web. Questa comunicazione avviene tramite HTTP. Con https questa comunicazione è racchiusa in una connessione cifrata: TLS. Per questo il Suo sito web ha bisogno di un certificato TLS (spesso ancora chiamato certificato SSL). Il certificato dimostra che il server appartiene realmente a example.com, e la cifratura garantisce che nessuno lungo il percorso possa leggere o modificare i dati. Questo è importante sul Wi-Fi pubblico, dove non sa chi gestisce la rete (lezione 5.3).
A ogni risposta, oltre alla pagina stessa, il server invia anche una serie di header: brevi righe con informazioni e istruzioni per il browser. Non li vede sullo schermo, ma determinano in larga misura quanto il browser gestisca il Suo sito in modo sicuro. Una parte di questi header sono header di sicurezza. In questa lezione esamineremo quattro livelli: certificato, reindirizzamento, HSTS e header. Dopodiché daremo uno sguardo rapido all'aggiornamento del sito stesso.
Livello 1: un certificato valido
Un certificato è in regola se soddisfa tre condizioni:
- non è scaduto;
- è stato emesso da un ente emittente affidabile (un'autorità di certificazione riconosciuta dai browser, come Let's Encrypt o un fornitore commerciale);
- è valido per esattamente il nome che il visitatore apre:
example.comewww.example.comse Lei usa entrambi.
Quasi tutti i fornitori di hosting oggi offrono un certificato gratuito che si rinnova automaticamente. Se qualcosa non funziona, di solito è perché il nome di dominio punta a un altro server, o perché un record CAA blocca l'ente emittente (lezione 4.3).
Importante da sapere: un lucchetto non dice nulla sull'affidabilità del sito. Indica solo che la connessione è cifrata e che il certificato corrisponde al nome nella barra degli indirizzi. Anche i siti di phishing su mijnbank-veilig.example hanno un lucchetto. Per questo nella lezione 3.2 impara a leggere il dominio.
Livello 2: reindirizzare sempre a https
Un certificato da solo non basta. Chi apre http://example.com, ad esempio tramite un vecchio link o digitando solo il nome, deve essere automaticamente portato alla versione https. Questo si chiama reindirizzamento (un redirect, di solito con codice di stato 301).
Un ordine corretto è il seguente:
http://example.com -> https://example.com
https://example.com -> https://www.example.com (solo se usa www come indirizzo principale)
http://www.example.com -> https://www.example.comAttenzione alla prima riga: reindirizzi prima da http a https sullo stesso nome, solo successivamente eventualmente verso www. In questo modo il browser può ricevere l'istruzione HSTS anche per il nome senza www. Internet.nl verifica esattamente questo.
Un errore comune è il doppio reindirizzamento: nel pannello di hosting e in un plugin o in .htaccess. Questo può creare un ciclo infinito ("troppi reindirizzamenti"). Usi un solo punto di configurazione.
Livello 3: HSTS
Il reindirizzamento ha un punto debole: la primissima richiesta avviene ancora in chiaro via http. Un aggressore sulla stessa rete può intercettare proprio quella richiesta e mantenere il visitatore su una versione falsificata e non cifrata. Per questo esiste HSTS (HTTP Strict Transport Security, RFC 6797).
Con HSTS il Suo sito invia tramite https un header:
Strict-Transport-Security: max-age=31536000; includeSubDomainsIl browser memorizza quindi: "questo sito va aperto solo tramite https, per i prossimi 31.536.000 secondi (un anno)". Se il visitatore digita in seguito http://example.com, il browser stesso lo trasforma in https, ancora prima che qualcosa passi sulla rete. La richiesta iniziale vulnerabile non avviene più.
| Elemento | Significato |
|---|---|
max-age= | Per quanto tempo il browser lo memorizza, in secondi. Internet.nl considera almeno un anno (max-age=31536000) sufficiente; un periodo breve non protegge le persone che visitano il Suo sito solo occasionalmente. |
includeSubDomains | Vale anche per tutti i sottodomini, come shop.example.com e mail.example.com. |
preload | Lei richiede l'inserimento nell'elenco integrato nei browser (hstspreload.org). In questo modo è protetta anche la primissima visita. Requisiti: tra gli altri un max-age di almeno un anno, includeSubDomains e tutti i sottodomini su https. Rimuoverlo richiede molto tempo. |
max-age=0 | Cancella l'istruzione memorizzata. |
Tre cose che deve sapere prima di attivare HSTS:
- Prima https deve funzionare ovunque. Un browser che ha memorizzato HSTS e rileva un errore di certificato non offre alcun pulsante per procedere comunque (RFC 6797, paragrafo 12.1). Se il Suo certificato scade o non è valido per
www, il Suo sito diventa irraggiungibile per quei visitatori finché il problema non viene risolto. includeSubDomainsriguarda tutto ciò che è sotto il Suo dominio. Un vecchio sottodominio senza certificato, ad esempio una pagina di stampante o telecamera sucamera.example.com, non sarà più raggiungibile.- Lo costruisca gradualmente. Inizi con un
max-agebreve (ad esempio un giorno), verifichi che tutto funzioni, e aumenti per gradi fino a un anno. Attenda l'intero periodo a ogni passaggio.
Un header HSTS che arriva tramite normale http viene ignorato dal browser. Lo vede quindi solo nella risposta https.
Livello 4: header di sicurezza
Oltre a HSTS, ci sono alcuni header che dicono al browser cosa può e cosa non può fare con le Sue pagine. Non deve averli tutti perfetti, ma i primi tre sono semplici e privi di rischi.
| Header | Contro cosa | Valore corretto |
|---|---|---|
X-Content-Type-Options | Il browser cerca di indovinare da solo che tipo di file sia, per cui un'"immagine" caricata può essere eseguita come script. | nosniff (l'unico valore valido) |
Content-Security-Policy: frame-ancestors ... o X-Frame-Options | Clickjacking: un altro sito carica in modo invisibile la Sua pagina in un frame e fa sì che i visitatori clicchino inconsapevolmente sui Suoi pulsanti. | frame-ancestors 'self' o 'none'; l'header più vecchio X-Frame-Options: SAMEORIGIN o DENY |
Referrer-Policy | Quando si clicca verso un altro sito, il browser invia anche l'indirizzo della pagina precedente. Può contenere informazioni sensibili, come un termine di ricerca o un numero d'ordine. | no-referrer o same-origin (rigoroso), strict-origin-when-cross-origin (comune, internet.nl segnala un avviso in questo caso) |
Content-Security-Policy (completa) | Limita da quali posizioni possono essere caricati script, stili e immagini. Rende molto più difficili gli script dannosi iniettati (XSS). | Personalizzata per ogni sito. Eviti unsafe-inline, unsafe-eval e caratteri jolly. |
Una Content-Security-Policy completa è la più efficace, ma anche la più complessa: una regola troppo rigida può rompere le Sue statistiche, il Suo pulsante di pagamento o la Sua finestra di chat. Con la variante Content-Security-Policy-Report-Only può prima misurare cosa verrebbe bloccato, senza rompere nulla. Affidi questo aspetto al Suo sviluppatore web, oppure inizi solo con frame-ancestors.
Visualizzare gli header personalmente
Apra il Suo sito in un browser, prema F12 (o scelga "Ispeziona"), vada alla scheda Rete, ricarichi la pagina e clicchi sulla prima richiesta. Sotto "Header di risposta" (Response Headers) vede tutto ciò che il server invia. Anche dalla riga di comando è possibile:
curl -sI https://example.com/Il sito web stesso: CMS, plugin e temi
I migliori header non servono a nulla se il software dietro il Suo sito è vulnerabile. La maggior parte dei siti violati di piccole imprese non è stata compromessa tramite il server web, ma tramite un plugin obsoleto, un tema non aggiornato da anni, o una password amministratore debole.
- Attivi gli aggiornamenti automatici per il Suo CMS (ad esempio WordPress, Joomla o un altro sistema) e per i plugin dove possibile.
- Rimuova i plugin e i temi che non usa; disattivarli non basta, i file restano comunque presenti.
- Usi per il login amministratore una password forte e unica e l'autenticazione a due fattori (2FA) (modulo 2), e limiti il numero di tentativi di accesso.
- Mantenga la versione PHP (o di un altro linguaggio) del Suo pacchetto su una versione che riceve ancora aggiornamenti (lezione 5.1).
In pratica: ecco come si presenta
In DirectAdmin, il pannello usato da WebOké, nel Suo dominio attivi prima SSL sicuro e poi Forza SSL con reindirizzamento https. Nello stesso punto si trova un interruttore per HSTS; lo attivi solo quando il certificato funziona per tutti i nomi. Con altri fornitori il procedimento è simile, oppure lo configura nelle impostazioni del Suo CMS.
Se il Suo sito gira su Apache o LiteSpeed, può impostare gli header anche in .htaccess:
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000"
Header always set X-Content-Type-Options "nosniff"
Header always set Content-Security-Policy "frame-ancestors 'self'"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>Aggiunga includeSubDomains solo quando è sicuro che ogni sottodominio abbia https. Dopo ogni modifica, verifichi con il test del sito web di internet.nl o con gli strumenti per sviluppatori del Suo browser.
Riepilogo
- Un lucchetto significa: cifrato e il nome corretto. Non significa: affidabile.
- Reindirizzi sempre http verso https, prima sullo stesso nome, e in un solo punto.
- HSTS fa in modo che il browser memorizzi che il Suo sito va solo tramite https; internet.nl considera corretto un
max-agedi almeno un anno (31536000). Lo attivi solo quando https funziona ovunque, e lo costruisca gradualmente. X-Content-Type-Options: nosniff,frame-ancestors(oX-Frame-Options) eReferrer-Policysono semplici; una Content-Security-Policy completa richiede personalizzazione.- Gli aggiornamenti del Suo CMS, dei plugin e dei temi sono importanti almeno quanto gli header.
Quiz
Esercizio
Esercizio A4.2: Verificare https, HSTS e gli header del proprio sito. Inserisca il nome di dominio del Suo sito web (se non ne ha uno, usi internet.nl). Il programma apre http:// e https:// del Suo dominio e verifica il certificato, il reindirizzamento a https, HSTS e gli header di sicurezza. Riceve per ogni punto un verde, arancione o rosso con spiegazione.
Esercizio D4.2: Aggiornare e fare pulizia nel Suo sito web. Acceda alla gestione del Suo sito web, verifichi la versione del Suo CMS, dei plugin e dei temi, rimuova ciò che non usa e attivi gli aggiornamenti automatici dove possibile. Spunti la checklist e risponda alla domanda di riflessione.
Esercizio D4.2: Aggiornare e fare pulizia nel Suo sito web
Ecco come procedere: (1) Acceda alla gestione del Suo sito web (oppure chieda al Suo sviluppatore web di farlo insieme a Lei). (2) Annoti la versione del Suo CMS e verifichi se ci sono aggiornamenti disponibili. (3) Crei un backup (lezione 6.1), installi gli aggiornamenti di CMS, plugin e temi. (4) Rimuova i plugin e i temi che non utilizza. (5) Attivi gli aggiornamenti automatici dove possibile. (6) Controlli quali account amministratore esistono e rimuova gli account delle persone che non lavorano più presso di Lei. (7) Attivi l'autenticazione a due fattori (2FA) per ogni account amministratore.
Le Sue spunte e note restano solo in questo browser; non le inviamo da nessuna parte. Se ha effettuato l'accesso, conserviamo in I miei corsi solo il fatto che ha svolto l'esercizio.
Per approfondire
I passaggi descritti negli articoli di WebOké valgono per l'ambiente di WebOké; presso altri fornitori il procedimento è simile.
- Attivazione, rinnovo e risoluzione dei problemi del certificato SSL
- Reindirizzamento obbligatorio dei visitatori verso https
- Guida DirectAdmin 6.4: Reindirizzare sempre i visitatori su https
- Guida DirectAdmin 6.7: Nessun lucchetto o 'non sicuro': risolvere i contenuti misti
- Guida DirectAdmin 15.10: Web Application Firewall
- Proteggere wp-login.php di WordPress
- Internet.nl, test del sito web (indipendente): https://internet.nl
- RFC 6797, HTTP Strict Transport Security: https://www.rfc-editor.org/rfc/rfc6797
- Elenco preload HSTS: https://hstspreload.org
- MDN, spiegazione degli header (in inglese): https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Strict-Transport-Security
