Desarrollo web
Per què hauries d'afegir capçaleres de seguretat al teu lloc
Què són les capçaleres de seguretat HTTP, quines funcions compleixen i com
4 min de lectura
Per què hauries d'afegir capçaleres de seguretat al teu lloc
Les capçaleres de seguretat són etiquetes que el servidor acompanya a cada pàgina i que donen ordres directes al navegador. No només augmenten la seguretat: també li diuen quines funcions té permeses. Sense elles, el navegador decideix tot sol. Amb elles, manes tu. I un lloc cuidat no és només segur: també val la pena saber si carrega ràpid (Per què fer un test de velocitat?) i que els cercadors l'entenguin, per exemple amb el marcatge schema (Etiquetatge schema: què és i com et pot ajudar la teva web).
Tipus de capçaleres de seguretat i les seves funcions
N'hi ha de diversos tipus, i cadascuna té un propòsit específic. Aquestes són algunes de les més importants:
Content-Security-Policy (política de seguretat de contingut)
Aquesta capçalera defineix les fonts aprovades des de les quals el navegador pot carregar contingut al teu lloc. En especificar les fonts que vols permetre, protegeixes els visitants d'una varietat de problemes, inclosos els atacs XSS (algú fica codi propi dins la teva pàgina). Cal configurar-les bé: decideixen quin contingut es carrega i quin es bloqueja.
<IfModule mod_headers.c>
Header set Content-Security-Policy "upgrade-insecure-requests"
</IfModule>
Strict-Transport-Security (HSTS)
La capçalera Strict-Transport-Security indica als navegadors que el lloc només s'ha d'obrir per HTTPS (la versió xifrada d'HTTP). Connexió segura i xifrada sempre: la privacitat de les dades dels visitants, protegida.
<IfModule mod_headers.c>
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>
X-Xss-Protection (protecció contra atacs XSS)
Aquesta capçalera atura la càrrega de la pàgina quan es detecta un atac de Cross-Site Scripting. Una xarxa més contra el mateix perill.
<IfModule mod_headers.c>
Header set X-Xss-Protection "1; mode=block"
</IfModule>
X-Frame-Options (opcions de marc)
X-Frame-Options especifica quins llocs tenen permès incrustar el teu web dins un marc (una pàgina carregada dins una altra). Amb això es tallen els atacs de «clickjacking»: amagar la teva pàgina sota un botó d'una altra web per enganyar qui hi clica. La seva senzillesa la converteix en una opció excel·lent per implementar sense complicacions.
<IfModule mod_headers.c>
Header set X-Frame-Options "SAMEORIGIN"
</IfModule>
X-Content-Type-Options (opcions de tipus de contingut)
Aquesta capçalera només admet un valor vàlid i evita que els navegadors intentin endevinar el tipus de contingut d'una resposta d'una manera diferent a la declarada pel servidor. Menys baixades no desitjades i menys riscos amb el contingut que pugen els usuaris.
<IfModule mod_headers.c>
Header set X-Content-Type-Options "nosniff"
</IfModule>
Referrer-Policy (política de referents)
La política de referents indica al navegador quina informació d'origen ha de donar en clicar enllaços cap a altres llocs. Útil per limitar la quantitat de dades que es transmeten amb cada clic.
<IfModule mod_headers.c>
Header set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>
Permissions-Policy (política de permisos)
Aquesta política permet desactivar o activar certes funcions de la plataforma web, com la geolocalització, tant al teu lloc com a les pàgines que incrustes. Control fi sobre com s'executen les característiques del navegador.
<IfModule mod_headers.c>
Header set Permissions-Policy "geolocation=self"
</IfModule>
Com comprovar les teves capçaleres de seguretat
Si ja has configurat capçaleres de seguretat al teu lloc i vols comprovar si són vàlides, pots utilitzar l'eina externa de securityheaders.com per fer-ho.
El meu codi personalitzat
Aquí tens el codi que jo utilitzo a les meves instal·lacions de WordPress, al .htaccess (el fitxer de configuració del servidor Apache).
Aquest seria el codi bàsic:
# Inicio Security Headers
<IfModule mod_headers.c>
Header set Content-Security-Policy "upgrade-insecure-requests"
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header set X-Xss-Protection "1; mode=block"
Header set X-Frame-Options "SAMEORIGIN"
Header set X-Content-Type-Options "nosniff"
Header set Referrer-Policy "strict-origin-when-cross-origin"
Header set Permissions-Policy "geolocation=self"
</IfModule>
# Fin Security Headers
I aquest és el codi, una mica més complet:
# Security HttpHeaders
<IfModule mod_headers.c>
Header set Content-Security-Policy "upgrade-insecure-requests"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS
Header set X-Xss-Protection "1; mode=block"
Header set X-Frame-Options "SAMEORIGIN"
Header set X-Content-Type-Options "nosniff"
Header set Referrer-Policy "strict-origin-when-cross-origin"
Header set Permissions-Policy "geolocation=self"
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET,POST"
Header set Access-Control-Allow-Headers "Content-Type, Authorization"
Header set Cross-Origin-Embedder-Policy "unsafe-none; report-to='default'"
Header set Cross-Origin-Embedder-Policy-Report-Only "unsafe-none; report-to='default'"
Header set Cross-Origin-Opener-Policy "unsafe-none"
Header set Cross-Origin-Opener-Policy-Report-Only "unsafe-none; report-to='default'"
Header set Cross-Origin-Resource-Policy "cross-origin"
Header set X-Permitted-Cross-Domain-Policies "none"
</IfModule>