Întărirea PHP pentru WordPress

Publicat: 2021-06-29

WordPress rulează pe PHP și este o componentă de bază la care trebuie să acordați atenție atunci când vă consolidați site-ul WordPress. Acest articol va acoperi unele dintre cele mai comune fructe pe care le puteți aborda când vine vorba de securitatea PHP pentru WordPress.

Atenție – Fiți atenți când modificați setările PHP. Setările și sintaxa incorecte vă pot deteriora site-ul. Testați întotdeauna modificările într-un mediu de dezvoltare sau de punere în scenă înainte de a face modificări în producție.

Cuprins

  • Utilizați cea mai recentă versiune PHP
  • Suprimați versiunea PHP
  • Eliminați orice fișiere phpinfo().
  • Suprimați erorile și avertismentele PHP
  • Restricționarea include
  • Dezactivați fișierele de la distanță incluse
  • Dezactivați sau limitați funcțiile periculoase
  • Blocați execuția PHP în directoare sensibile
  • Concluzie

Utilizați cea mai recentă versiune PHP

Pe lângă faptul că vă asigurați că vă corectați sistemul de operare, serverul MySQL, serverul web (de exemplu, Nginx, Apache, IIS...), este, de asemenea, absolut crucial să vă asigurați că rulați o versiune complet acceptată de PHP 1 .

Deoarece PHP este expus la Internet (deoarece WordPress rulează peste interpretul PHP) este expus un risc mai mare de atac în cazul în care este descoperit un exploit pentru o vulnerabilitate în PHP. Într-o astfel de măsură, menținerea PHP actualizat (și mai mult, pentru a sta departe de versiunile PHP 5.x aflate la sfârșitul vieții) este crucială nu numai pentru a preveni apariția atacurilor, ci și pentru a permite atacatorilor să escaladeze atacurile dacă ei reușesc să se introducă pe site-ul dvs. WordPress (de exemplu, exploatând o vulnerabilitate într-un plugin WordPress).

Suprimați versiunea PHP

La fel ca majoritatea software-ului de server web, în ​​mod implicit, PHP expune versiunea pe care o rulează printr-un antet HTTP X-Powered-By. Deși aceasta în sine nu este o vulnerabilitate de securitate, ca în orice alte situații, enumerarea versiunilor de software este în general utilă pentru atacatori în timpul fazei de recunoaștere a unui atac. Prin urmare, dezactivând versiunea PHP, ați face un atac puțin mai greu de reușit.

Din fericire, acest lucru este ușor de dezactivat folosind setarea expose_php. În fișierul de configurare php.ini , pur și simplu adăugați următoarele.

expose_php = Off

Eliminați orice fișiere phpinfo().

Crearea unui fișier PHP folosind funcția phpinfo() pentru a fi folosită pentru depanare este un obicei prost comun pe care mulți administratori de sistem PHP îl au. În cazul în care un atacator întâlnește un fișier „phpinfo” (de obicei, nu este surprinzător numit, phpinfo.php), i se oferă o mulțime de informații și detalii despre nu numai versiunea PHP care rulează pe server, ci și despre alte aspecte ale site-ului web, cum ar fi ca server web și baze de date.

Dacă într-adevăr trebuie să rulați phpinfo(), este mult mai preferabil să faceți acest lucru din linia de comandă, după cum urmează.

php -i

Dacă aveți mai multe configurații de PHP pe sistemul dvs. (foarte frecvente), puteți utiliza următoarea comandă pentru a specifica ce fișier php.ini să utilizați.

php -c /etc/php/apache2/php.ini -i

Suprimați erorile și avertismentele PHP

În timp ce erorile, avertismentele și excepțiile sunt utile în timpul dezvoltării, dacă sunt afișate într-un mediu public, atacatorii vor folosi adesea aceste informații pentru a obține o perspectivă asupra configurației serverului, aspectului aplicației și componentelor.

Mesajele de eroare sunt unele dintre cele mai obișnuite căi către dezvăluirea informațiilor, adesea scurgând informații, cum ar fi calea de instalare a aplicației și detaliile de conectivitate la baza de date. În loc să afișați erori și avertismente, asigurați-vă că aceste informații sunt înregistrate. Mai multe informații despre acest subiect pot fi găsite în documentația oficială PHP.

Din fericire, acest lucru este ușor de dezactivat folosind setarea display_errors. În fișierul de configurare php.ini, pur și simplu adăugați următoarele.

display_errors = Off
log_errors = On

Restricționarea include

Vulnerabilitățile de includere a fișierelor permit unui atacator să controleze o instrucțiune PHP include(). În timp ce PHP va executa orice cod PHP într-un fișier care este inclus, va imprima orice altceva (presupunând că este text simplu). Aceasta înseamnă că un atacator care preia controlul asupra unei vulnerabilități de includere a fișierelor poate ajunge să execute ceva similar cu următorul, oferindu-i acces la fișierele sensibile de sistem. Pentru a citi mai multe despre includerea fișierelor, aruncați o privire la acest articol.

include "../../../../etc/passwd"

Prin setarea open_basedir în php.ini, puteți instrui PHP să permită numai includeri într-un anumit director și mai jos. Deși acest lucru nu elimină vulnerabilitățile de includere a fișierelor, cu siguranță le face mai restricționate și, de asemenea, provoacă unele atacuri mai avansate care pot duce la executarea codului (când un atacator poate executa comenzi pe serverul tău).

Puteți seta setarea PHP open_basedir după cum urmează în fișierul dvs. php.ini.

open_basedir = /var/www/html/example.com

Dezactivați fișierele de la distanță incluse

Pe lângă restricționarea includerilor locale la un anumit director folosind open_basedir, este, de asemenea, recomandabil să dezactivați includerile la distanță. Atacurile de includere de fișiere de la distanță (RFI) funcționează similar atacurilor de includere de fișiere locale, dar în loc ca un atacator să fie legat de fișiere din sistem, includerea de fișiere de la distanță permite unui atacator să includă fișiere în rețea. Acest lucru este extrem de periculos și majoritatea atacurilor RFI se termină prin faptul că un atacator poate executa în mod arbitrar cod pe serverul dvs. web (numit execuție de cod la distanță sau RCE).

Pentru a dezactiva includerile de fișiere la distanță, utilizați opțiunile PHP allow_url_fopen și allow_url_include din fișierul dvs. php.ini, după cum urmează.

allow_url_fopen = Off
allow_url_include = Off

Dezactivați sau limitați funcțiile periculoase

În cazul în care un atacator, în ciuda tuturor măsurilor dvs. de securitate, reușește să găsească cu succes o vulnerabilitate în securitatea PHP a WordPress-ului dvs., pe care o poate exploata, ultimul lucru pe care îl doriți este ca el să poată rula cod arbitrar pe serverul dvs. . Dacă un atacator este capabil să ruleze cod arbitrar pe serverul dvs., probabil că poate instala un webshell sau poate stabili un shell invers pentru a vă controla și mai mult serverul și a-l utiliza pentru a-și face licitațiile nefaste (cum ar fi răspândirea de malware, utilizarea site-ului dvs. pentru campanii de phishing sau refuz). atacurilor de serviciu sau chiar minarea criptomonedei).

Dezactivând funcții precum shell_exec() și system(), puteți împiedica utilizatorii și atacatorii să folosească aceste funcții periculoase. Deși pot exista motive legitime pentru a utiliza aceste funcții, ele sunt foarte puține și sunt la distanță între ele și, de obicei, există o modalitate mai sigură de a obține același rezultat.

Atenție – Testați cu atenție următoarele într-un mediu de testare sau de pregătire înainte de a rula acest lucru în producție, deoarece unele software/plugin-uri pe care le executați pot depinde (sperăm în mod legitim) de aceste funcții.

Următoarea este o colecție de funcții potențial periculoase pe care poate doriți să le dezactivați în PHP folosind setarea disable_functions din fișierul dvs. php.ini.

disable_functions = php_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace,
tmpfile, link, ignore_user_abord, shell_exec, dl, exec, system, highlight_file, source,
show_source, fpaththru, virtual, posix_ctermid, posix_getcwd, posix_getegid, posix_geteuid,
posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid,
posix_getpgrp, posix_getpid, posix_getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit, 
posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, 
posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times, posix_ttyname, posix_uname, 
proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo</em>

Blocați execuția PHP în directoare sensibile

În mod implicit, directorul dvs. wp-content/uploads , care este folosit pentru a încărca teme, pluginuri, imagini, videoclipuri și alte fișiere pe site-ul dvs. web, are permisiunea de a executa cod PHP. Acest lucru este destul de riscant – dacă un atacator poate să profite cumva de o vulnerabilitate de încărcare a fișierelor într-un plugin sau o temă, ar putea să încarce un webshell sau un tip similar de backdoor. Deoarece execuția PHP ar fi permisă în directorul wp-content/uploads , acel atacator ar putea fi capabil să execute acel cod PHP pentru a-și face licitația rău intenționată.

Prevenirea acestui lucru este de fapt destul de simplă - dezactivați execuția PHP în wp-content/uploads și în director. Modul naiv ar fi să blochezi pur și simplu accesul la fișierele *.php folosind .htaccess .

<Files *.php>
deny from all
</Files>

Cu toate acestea, configurația de mai sus este relativ ușor de ocolit – PHP în cele mai multe cazuri va executa cu plăcere fișiere .phtml .php3. Cea mai sigură modalitate ar fi să dezactivați literalmente motorul PHP din director. Următoarea configurație .htaccess ar trebui plasată în directorul wp-content/uploads și wp-includes (un alt director vizat în mod obișnuit de atacatori).

php_flag engine off

Securitate PHP pentru WordPress – gânduri finale

În timp ce WordPress în sine trebuie considerat o platformă robustă și sigură, mediul și infrastructura pe care rulează instalarea dvs. WordPress sunt foarte importante pentru a asigura siguranța site-ului dvs. în ansamblu. Implementarea subiectelor abordate în acest ghid de consolidare a securității PHP vă va oferi o a doua linie de apărare, ceea ce face mult mai greu pentru un atacator să escaladeze un atac după ce a abuzat de o vulnerabilitate din site-ul dvs. WordPress.

Dacă doriți să aflați mai multe despre cum să vă consolidați site-ul WordPress, citiți ghidul nostru definitiv despre securitatea și consolidarea WordPress.

Referințe utilizate în acest articol [ + ]

Referințe utilizate în acest articol
1 https://www.php.net/supported-versions.php