.htaccess: header e sicurezza

.htaccess: header e sicurezza

 

Gli header HTTP costituiscono la parte nascosta della comunicazione che avviene ogni volta che da un server viene richiamata una pagina web (da non confondere con il contenuto del tag header da inserire prima del body all’interno della pagina).

Negli header di una pagina possiamo trovare molte informazioni interessanti (a volte troppe…)!

Questi, ad esempio, erano gli header di laltroweb.it fino a mezz’ora fa:

Cita

Server: cloudflare-nginx (sotto cloudflare)

Date: Fri, 26 Feb 2016 12:38:31 GMT

Content-Type: text/html;charset=UTF-8

x-powered-by: PHP/**** (versione esatta del php)

Expires: Thu, 19 Nov 1981 08:52:00 GMT

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 (info sulla cache)

Pragma: no-cache

X-XSS-Protection: 0 (nessuna protezione xss)

Strict-Transport-Security: max-age=15552000; preload (STS attivo)

x-content-type-options: nosniff

cf-ray: 27abb51828920e5a-MXP

Content-Encoding: gzip (compressione attiva)

X-Firefox-Spdy: h2
200 OK (pagina online)

mi son prodigato a rimediare via htaccess (non potrei diversamente non essendo su vps o dedicato)…

Ed ecco dove sono arrivato:

Cita

Server: cloudflare-nginx

Date: Fri, 26 Feb 2016 12:40:00 GMT

Content-Type: text/html;charset=UTF-8

Expires: Thu, 19 Nov 1981 08:52:00 GMT

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=604800, public

Pragma: no-cache

X-XSS-Protection: 1; mode=block

X-Frame-Options: SAMEORIGIN

x-content-type-options: nosniff

x-permitted-cross-domain-policies: master-only

Strict-Transport-Security: max-age=15552000; preload

content-security-policy: default-src https:; connect-src https:; font-src https: data:; child-src https: data:; img-src https: http: data:; media-src https: data:; object-src https:; script-src ‘unsafe-inline’ ‘unsafe-eval’ https:; style-src ‘unsafe-inline’ https:;

cf-ray: 27abb73819730e5a-MXP

Content-Encoding: gzip

X-Firefox-Spdy: h2
200 OK

content security policy, xss attivo, nessuna info su server/php, frame control… direi che va molto meglio, non trovate?

Ecco il codice usato:

 <IfModulemod_headers.c>  # Turn off ETags: Header unset ETag FileETag None  ExpiresActive On ExpiresDefault "access plus 1 month" ExpiresByType image/gif "access plus 1 month" ExpiresByType image/jpg "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType text/css "access plus 1 month" ExpiresByType text/javascript "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" ExpiresByType application/x-shockwave-flash "access plus 1 week" ExpiresByType video/x-flv "access plus 1 week" ExpiresByType application/pdf "access plus 1 week" ExpiresByType text/html "access plus 1 month" ExpiresByType text/xml "access plus 1 month" ExpiresByType image/x-icon "access plus 1 year" ExpiresByType application/font-woff "access plus 1 month" ExpiresByType application/x-font-woff "access plus 1 month" ExpiresByType font/woff "access plus 1 month" ExpiresByType application/font-woff2 "access plus 1 month" ExpiresByType application/vnd.ms-fontobject "access plus 1 month" ExpiresByType application/x-font-ttf "access plus 1 month" ExpiresByType font/opentype "access plus 1 month" ExpiresByType image/svg+xml "access plus 1 month"  # Unset Header: Header unset Server Header unset X-Powered-By Header always unset X-Powered-By Header unset X-CF-Powered-By Header unset X-Mod-Pagespeed Header unset X-Pingback    # You can also customize server name: ### Header set X-Powered-By: "My custom server name :P" # But is best to simply unset ;-)  # Set Header: Header set X-Frame-Options: SAMEORIGIN Header always set X-XSS-Protection: "1; mode=block" Header set X-Content-Type-Options: nosniff Header set X-Permitted-Cross-Domain-Policies "master-only" Header set Strict-Transport-Security "max-age=15552000; preload" env=HTTPS Header always set Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=604800, public"  # KeepAlive: Header set Connection keep-alive  # Content-Security-Policy: Header set Content-Security-Policy "default-src https:; connect-src https:; font-src https: data:; child-src https: data:; img-src https: http: data:; media-src https: data:; object-src https:; script-src 'unsafe-inline' 'unsafe-eval' https:; style-src 'unsafe-inline' https:;"  </IfModule>

(ps: la parte “expires” è un extra che va oltre quanto discusso nell’articolo. in pratica si occupa della cache per estensione file e della loro scadenza. scegliete voi se usarla oppure no! … nell’htaccess noterete che qualche volta ho usato “always”. mi è stato necessario farlo altrimenti la regola non aveva effetto o si univa alle impostazioni esistenti e quindi non andava bene – voi potete provare senza, poi, eventualmente, aggiungerlo solo se necessario – proprio come ho fatto io)!

Ovviamente il codice va adattato in base alle proprie esigenze (non usate per nessun motivo al mondo quella “Content Security Policy” se il vostro sito non è in https)!!!

Nascondere determinate info e modificare alcuni di questi parametri è estremamente importante. Poche righe di codice potrebbero fare la differenza 😉

PS: per “sbrigarmela” nel vedere gli header, su firefox, ho usato l’estensione: Web Developer

web-developer_content(Information, View Response Header)…

Per dubbi o perplessità – o se avete commenti da fare, proposte migliorative – io ci sono 🙂




Lascia un commento