Configurarea headerelor de securitate HTTP pentru WordPress

Configurarea headerelor de securitate HTTP pentru WordPress

Configurarea headerelor de securitate HTTP pentru WordPress este o măsură esențială de protecție pe care majoritatea proprietarilor de site-uri o ignoră. Aceste headere instruiesc browserul cum să gestioneze conținutul și previn atacuri precum XSS, clickjacking și injection.

Implementarea corectă durează sub 30 de minute și îmbunătățește considerabil securitatea site-ului dumneavoastră.

Configurarea headerelor de securitate HTTP pentru WordPress

Headerele de securitate HTTP sunt instrucțiuni trimise de server către browser odată cu fiecare răspuns. Ele definesc politici de securitate pe care browserul le aplică automat.

Verificați headerele actuale ale site-ului pe securityheaders.com. Un scor F sau D indică lipsa headerelor de securitate de bază.

X-Content-Type-Options

Acest header previne MIME type sniffing, un atac în care browserul interpretează un fișier ca alt tip decât cel declarat. De exemplu, un fișier text interpretat ca JavaScript.

X-Content-Type-Options: nosniff

Adăugați în .htaccess:

<IfModule mod_headers.c>
    Header set X-Content-Type-Options "nosniff"
</IfModule>

Acest header nu are efecte secundare negative și trebuie activat pe toate site-urile.

X-Frame-Options

Previne încadrarea site-ului dumneavoastră într-un iframe pe alt domeniu, protejând împotriva atacurilor de tip clickjacking. Atacatorul suprapune un iframe invizibil peste un buton aparent inofensiv.

X-Frame-Options: SAMEORIGIN

Valori posibile:

  • DENY: nu permite încadrarea în iframe nicăieri
  • SAMEORIGIN: permite doar pe același domeniu
  • ALLOW-FROM uri: permite doar de pe un domeniu specific (depreciat)
<IfModule mod_headers.c>
    Header always set X-Frame-Options "SAMEORIGIN"
</IfModule>

Folosiți SAMEORIGIN dacă aveți nevoie de iframe-uri pe propriul site (de exemplu, pentru previzualizarea paginilor în WordPress Customizer).

X-XSS-Protection

Activează filtrul XSS încorporat în browsere. Deși browserele moderne au protecție XSS implicit, acest header oferă un nivel suplimentar de siguranță.

X-XSS-Protection: 1; mode=block

Valoarea mode=block blochează complet pagina dacă este detectat un atac XSS, în loc să încerce să o curețe.

<IfModule mod_headers.c>
    Header set X-XSS-Protection "1; mode=block"
</IfModule>

Strict-Transport-Security (HSTS)

HSTS forțează browserul să folosească exclusiv HTTPS pentru toate conexiunile viitoare cu site-ul dumneavoastră. Previne atacurile SSL stripping unde un intermediar forțează conexiunea pe HTTP.

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Parametri:

  • max-age=31536000: browser-ul va folosi HTTPS pentru un an
  • includeSubDomains: aplică și pe subdomeniile site-ului
  • preload: permite includerea în lista preload a browserelor
<IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>

Atenție: activați HSTS doar după ce confirmați că HTTPS funcționează perfect pe întregul site. Odată activat cu max-age lung, browserele vor refuza conexiuni HTTP chiar dacă dezactivați headerul.

Content-Security-Policy (CSP)

CSP este cel mai puternic, dar și cel mai complex header de securitate. Definește exact de unde poate încărca browserul scripturi, stiluri, imagini și alte resurse.

CSP de bază pentru WordPress

Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data: https://fonts.gstatic.com; connect-src 'self';

WordPress și multe pluginuri folosesc inline scripts și eval(), de aceea 'unsafe-inline' și 'unsafe-eval' sunt adesea necesare. Eliminarea lor necesită modificări substanțiale în codul temei și pluginurilor.

Implementarea treptată a CSP

Începeți cu modul Report-Only pentru a identifica ce resurse ar fi blocate:

Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report

Monitorizați rapoartele și ajustați politica înainte de a trece de la Report-Only la enforcing.

Referrer-Policy

Controlează cât de multă informație despre pagina de origine trimite browserul când utilizatorul navighează către alt site.

Referrer-Policy: strict-origin-when-cross-origin

Această valoare trimite URL-ul complet pentru navigarea pe același site, dar doar originea (domeniul) pentru navigarea cross-origin. Protejează URL-urile interne care pot conține informații sensibile.

Permissions-Policy

Controlează accesul la funcționalitățile browserului precum camera, microfonul, geolocalizarea și accelerometrul:

Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=()

Valorile goale () dezactivează complet funcționalitatea. Adăugați excepții doar dacă site-ul dumneavoastră le folosește efectiv.

Configurare completă în .htaccess

Iată toate headerele de securitate combinate într-un singur bloc .htaccess:

<IfModule mod_headers.c>
    Header set X-Content-Type-Options "nosniff"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header set X-XSS-Protection "1; mode=block"
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    Header set Referrer-Policy "strict-origin-when-cross-origin"
    Header set Permissions-Policy "camera=(), microphone=(), geolocation=()"
    Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data: https://fonts.gstatic.com;"
</IfModule>

Configurare prin functions.php

Alternativ, puteți seta headerele direct din WordPress:

function seodns_security_headers() {
    header('X-Content-Type-Options: nosniff');
    header('X-Frame-Options: SAMEORIGIN');
    header('X-XSS-Protection: 1; mode=block');
    header('Referrer-Policy: strict-origin-when-cross-origin');
    header('Permissions-Policy: camera=(), microphone=(), geolocation=()');
}
add_action('send_headers', 'seodns_security_headers');

Metoda .htaccess este preferată deoarece se aplică tuturor fișierelor, nu doar celor procesate de WordPress.

Testarea headerelor configurate

După configurare, verificați headerele cu curl:

curl -I https://site-ul-dvs.ro

Sau folosiți securityheaders.com pentru un raport vizual cu scor. Ținta este scorul A sau A+.

Verificați că site-ul funcționează corect după adăugarea headerelor. CSP-ul poate bloca resurse necesare dacă nu este configurat corect. Testați toate paginile importante, inclusiv panoul de administrare WordPress.

Concluzii

Headerele de securitate HTTP sunt o linie de apărare esențială care completează celelalte măsuri de securizare WordPress. Implementarea lor este gratuită și durează sub 30 de minute.

Pentru un audit complet de securitate cibernetică sau pentru implementarea profesională a headerelor de securitate, echipa SEODNS vă poate ajuta. Contactați-ne pentru o evaluare gratuită a securității site-ului dumneavoastră.