Intestazioni HSTS e di sicurezza per il Suo sito web
Per ogni pagina il Suo server web invia degli header: brevi righe con istruzioni per il browser. Determinano in parte quanto il browser gestisce il Suo sito in modo sicuro. Qui può leggere cos'è HSTS, quali altri header di sicurezza esistono e come impostarli e testarli.
Prima di tutto il Suo sito deve avere un certificato funzionante e indirizzare i visitatori verso https. Può leggerlo in Attivare, rinnovare e risolvere i problemi del certificato SSL e Reindirizzare obbligatoriamente i visitatori verso https.
Cosa fa HSTS?
Il reindirizzamento verso https ha un momento debole: la prima richiesta tramite http avviene ancora senza crittografia. Qualcuno sulla stessa rete, per esempio su una wifi pubblica, può intercettare quella richiesta. HSTS (HTTP Strict Transport Security) risolve questo problema. Il Suo sito invia tramite https questo header:
Strict-Transport-Security: max-age=31536000
Il browser ricorda quindi che può aprire il Suo sito solo tramite https. Se un visitatore digita in seguito http://, il browser lo trasforma automaticamente in https, ancora prima che qualcosa venga inviato sulla rete. Un header HSTS che arriva tramite http normale viene ignorato dal browser.
| Elemento | Significato |
|---|---|
max-age | Per quanto tempo il browser lo ricorda, in secondi. Il test di internet.nl considera sufficiente almeno un anno (31536000). |
includeSubDomains | Vale anche per tutti i sottodomini, come shop.ilsuodominio.nl e mail.ilsuodominio.nl. |
preload | Richiede l'inserimento nell'elenco integrato nei browser (hstspreload.org). In questo modo è protetta anche la primissima visita. Per questo sono necessari tra l'altro un anno, includeSubDomains e https su tutti i sottodomini. Rimuoverlo richiede molto tempo. |
max-age=0 | Cancella l'istruzione memorizzata alla successiva visita tramite https. |
includeSubDomains questo vale anche per ogni sottodominio, come una vecchia pagina per telecamere o stampanti priva di certificato. Proceda quindi gradualmente: inizi con un max-age breve, per esempio un giorno (86400), verifichi che tutto funzioni e aumenti progressivamente fino a un anno.HSTS presso WebOké
Sulla maggior parte dei nostri server, il server web invia HSTS di default per ogni sito web aperto tramite https: Strict-Transport-Security: max-age=31536000. Si tratta di un anno, senza includeSubDomains e senza preload. Per questo non deve fare nulla. Su alcuni server non è attivo di default: lì lo attiva Lei stesso. Può vedere se il Suo sito invia già HSTS e con quale max-age negli strumenti per sviluppatori del Suo browser o nel test di internet.nl (vedere sotto).
L'interruttore HSTS in DirectAdmin
In DirectAdmin vada su Domains e clicchi sul Suo nome di dominio. Se Secure SSL Connection è attivo, vedrà presso HSTS l'interruttore Enable HTTP Strict Transport Security. Clicchi poi su Save per salvare. Come procedere passo dopo passo lo può leggere in Reindirizzare sempre i visitatori verso https.
Se il Suo sito invia già HSTS, non ha bisogno dell'interruttore. Lo attivi solo se il Suo sito non invia ancora HSTS. Imposti HSTS in un solo punto: in DirectAdmin oppure in .htaccess, non in entrambi. Se il browser riceve due header HSTS, utilizzerà solo il primo.
Gli altri header di sicurezza
| Header | Contro cosa | Valore da cui iniziare |
|---|---|---|
X-Content-Type-Options | Il browser cerca di indovinare da solo cos'è un file, 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 la Sua pagina in modo invisibile in un frame, cosicché i visitatori cliccano inconsapevolmente sui Suoi pulsanti. | frame-ancestors 'self', oppure il più vecchio header X-Frame-Options: SAMEORIGIN |
Referrer-Policy | Quando si clicca verso un altro sito, il browser invia l'indirizzo della pagina precedente, a volte con un termine di ricerca o un numero d'ordine incluso. | strict-origin-when-cross-origin, oppure in modo più rigoroso same-origin o no-referrer. Internet.nl considera corretti solo i valori più rigorosi. |
Permissions-Policy | Determina quali funzioni del browser possono utilizzare la Sua pagina e i frame incorporati, come fotocamera, microfono e posizione. | camera=(), microphone=(), geolocation=() disattiva queste tre. Se il Suo sito utilizza una di queste funzioni, la ometta. |
Content-Security-Policy (completo) | Limita da quali luoghi possono essere caricati script, stili e immagini. Questo rende molto più difficili gli script dannosi inseriti (XSS). | Personalizzato per sito. Eviti unsafe-inline, unsafe-eval e wildcard. |
Impostazione in .htaccess
Inserisca queste righe all'inizio del file .htaccess nella cartella public_html del Suo dominio. Prima crei una copia del file.
<IfModule mod_headers.c> 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" Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()" # Solo se il Suo sito non invia ancora HSTS (vedere sopra): # Header always set Strict-Transport-Security "max-age=31536000" </IfModule>
Aggiunga includeSubDomains solo quando è certo che ogni sottodominio abbia https. Se utilizza WordPress, può impostare gli header anche con un plugin. Scelga un plugin affidabile che viene ancora aggiornato, e imposti ogni header in un solo punto: nel plugin oppure in .htaccess.
Content-Security-Policy-Report-Only. Questo non blocca nulla, ma mostra nella console del browser cosa verrebbe bloccato. In caso di dubbio, lasci questa operazione al Suo sviluppatore web, oppure inizi solo con frame-ancestors.Test
- Internet.nl: inserisca il Suo dominio nel test del sito web su internet.nl.
- Il Suo browser: apra il Suo sito, prema F12 (oppure scelga Ispeziona), vada alla scheda Rete (Network), ricarichi la pagina e clicchi sulla prima richiesta. Sotto Intestazioni di risposta (Response Headers) vedrà tutto ciò che il Suo server invia.
- La riga di comando:
curl -sI https://ilsuodominio.nl/mostra gli header.
Dopo ogni modifica, verifichi che il Suo sito, i moduli e la pagina di pagamento funzionino ancora. Tenga inoltre aggiornati il Suo CMS, i plugin e i temi. Veda Proteggere wp-login.php di WordPress.
Ulteriori letture
- MDN: Strict-Transport-Security (inglese)
- MDN: Content-Security-Policy (inglese)
- MDN: Permissions-Policy (inglese)
- Elenco preload HSTS (inglese)
