Protejarea WordPress împotriva XSS și SQL injection: ghid practic

Protejarea WordPress împotriva XSS și SQL injection: ghid practic

XSS (Cross-Site Scripting) și SQL injection sunt două dintre cele mai răspândite tipuri de atacuri web, responsabile pentru o proporție semnificativă din compromiterile de site-uri WordPress. Înțelegând cum funcționează aceste atacuri și cum să vă apărați, reduceți dramatic riscul de compromitere a site-ului dvs.

Ce este atacul XSS (Cross-Site Scripting)

XSS este un atac în care codul JavaScript malițios este injectat în paginile unui site web și executat în browserul vizitatorilor. Atacatorul exploatează formulare sau câmpuri de input care nu sanitizează corect datele primite de la utilizatori.

Tipuri de XSS:

  • Reflected XSS: codul malițios este reflectat dintr-o cerere HTTP (de obicei dintr-un URL) și executat imediat
  • Stored XSS: codul este salvat în baza de date a site-ului (ex: un comentariu) și executat la fiecare vizualizare
  • DOM-based XSS: vulnerabilitatea există în JavaScript-ul front-end al site-ului

Consecințele unui atac XSS reușit pot include: furtul cookie-urilor de sesiune, redirecționarea utilizatorilor spre site-uri malițioase, defacement-ul site-ului sau infectarea vizitatorilor cu malware.

Cum preveniți XSS în WordPress

1. Escaping output

WordPress oferă funcții specifice pentru escaparea datelor înainte de a le afișa în HTML:

  • esc_html() – pentru text afișat în HTML
  • esc_attr() – pentru atribute HTML
  • esc_url() – pentru URL-uri
  • esc_js() – pentru JavaScript inline
  • wp_kses() – permite doar tag-uri HTML specifice

2. Sanitizarea inputului

Sanitizați toate datele primite de la utilizatori înainte de a le procesa sau salva în baza de date:

  • sanitize_text_field() – curăță text simplu
  • sanitize_email() – validează și sanitizează email
  • sanitize_url() – validează URL-uri
  • wp_kses_post() – permite HTML permis în conținut

3. Content Security Policy (CSP)

Un header CSP restricționează sursele din care browserul poate încărca scripturi, stiluri și alte resurse. O politică CSP strictă poate bloca executarea scripturilor injactate:

Content-Security-Policy: script-src 'self' https://www.googletagmanager.com

Configurați CSP prin headerele de securitate HTTP în .htaccess sau prin plugin.

Ce este SQL injection

SQL injection este un atac în care codul SQL malițios este inserat în interogări de baze de date prin câmpuri de input nesecurizate. Dacă site-ul dvs. concatenează direct inputul utilizatorului în interogări SQL, atacatorul poate:

  • Extrage toate datele din baza de date (parole, email-uri, date personale)
  • Modifica sau șterge date
  • În cazuri extreme, executa comenzi pe server

Cum preveniți SQL injection în WordPress

1. Folosiți $wpdb->prepare() pentru toate interogările cu date variabile

WordPress oferă clasa $wpdb cu metoda prepare() care folosește prepared statements – mecanismul principal de apărare împotriva SQL injection:

// GREȘIT  -  vulnerabil la SQL injection
$wpdb->query("SELECT * FROM {$wpdb->posts} WHERE post_author = " . $_GET['author']);

// CORECT  -  folosiți prepare()
$wpdb->get_results(
    $wpdb->prepare("SELECT * FROM {$wpdb->posts} WHERE post_author = %d", $_GET['author'])
);

Metodele prepare() din $wpdb sanitizează automat valorile introduse în interogare, eliminând complet riscul de SQL injection dacă sunt folosite corect.

2. Nu folosiți date nevalidate în interogări SQL

Orice dată venită din exterior (GET, POST, cookie, header HTTP) trebuie tratată ca potențial malițioasă. Validați și sanitizați înainte de utilizare în orice context.

3. Limitați privilegiile utilizatorului de baze de date

Utilizatorul MySQL al WordPress-ului dvs. are nevoie doar de: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP (pentru instalare plugin-uri). Nu acordați SUPER sau GRANT OPTION. Limitarea privilegiilor reduce impactul unui SQL injection reușit.

Protecția prin Web Application Firewall (WAF)

Un WAF analizează cererile HTTP și blochează pattern-urile asociate atacurilor XSS și SQL injection înainte ca acestea să ajungă la aplicația WordPress. Opțiuni:

  • Wordfence WAF – la nivel de plugin, gratuit cu actualizări întârziate
  • Cloudflare WAF – la nivel de rețea, înaintea serverului (recomandat)
  • Sucuri WAF – similar Cloudflare, specializat în securitate web

Protecția împotriva atacurilor brute force completează apărarea împotriva XSS și SQL injection – un site bine securizat are mai multe straturi de protecție active simultan.

Verificarea vulnerabilităților în plugin-uri și teme

Cea mai frecventă sursă de vulnerabilități XSS și SQL injection în WordPress nu este codul core al platformei (bine securizat), ci plugin-urile și temele terțe:

  • Abonați-vă la WPScan Vulnerability Database sau Wordfence Intelligence pentru alerte
  • Actualizați imediat plugin-urile care primesc actualizări de securitate
  • Dezinstalați plugin-urile inactive sau abandonate de developer
  • Folosiți doar plugin-uri din repository-ul oficial WordPress.org sau de la vendori cu reputație bună

Testarea propriului site pentru vulnerabilități

Instrumente pentru auditarea securității site-ului:

  • WPScan CLI – scanner dedicat pentru WordPress, identifică plugin-uri vulnerabile
  • Sucuri SiteCheck – scanare externă gratuită
  • Wordfence – scanare internă a fișierelor și a bazei de date

Securizarea completă a WordPress implică o combinație de cod corect scris, plugin-uri actualizate, WAF activ și monitorizare continuă – nu există o singură soluție care să rezolve toate vulnerabilitățile.