Rafforzamento di PHP per WordPress

Pubblicato: 2021-06-29

WordPress funziona su PHP ed è un componente fondamentale a cui prestare attenzione quando si rafforza il proprio sito WordPress. Questo articolo tratterà alcuni dei frutti più comuni e a basso impatto che puoi affrontare quando si tratta di sicurezza PHP per WordPress.

Attenzione : fai attenzione quando apporti modifiche alle impostazioni PHP. Impostazioni e sintassi errate possono danneggiare il tuo sito web. Testare sempre le modifiche in un ambiente di sviluppo o di staging prima di apportare modifiche alla produzione.

Sommario

  • Usa l'ultima versione di PHP
  • Sopprimi la versione PHP
  • Rimuovere eventuali file phpinfo()
  • Elimina gli errori e gli avvisi PHP
  • Limita include
  • Disabilita file remoto include
  • Disabilita o limita le funzioni pericolose
  • Blocca l'esecuzione di PHP nelle directory sensibili
  • Conclusione

Usa l'ultima versione di PHP

Oltre a assicurarti di applicare le patch al tuo sistema operativo, server MySQL, server web (ad es. Nginx, Apache, IIS...) è anche assolutamente fondamentale assicurarsi di eseguire una versione completamente supportata di PHP 1 .

Poiché PHP è esposto a Internet (perché WordPress viene eseguito sopra l'interprete PHP), è maggiormente a rischio di attacco nel caso in cui venga scoperto un exploit per una vulnerabilità all'interno di PHP. In tale misura, mantenere PHP aggiornato (e, soprattutto, stare lontano dalle versioni PHP 5.x di fine vita) è fondamentale non solo per prevenire il verificarsi di attacchi, ma anche per consentire agli aggressori di intensificare gli attacchi se riescono a prendere piede nel tuo sito Web WordPress (ad esempio sfruttando una vulnerabilità in un plug-in di WordPress).

Sopprimi la versione PHP

Come la maggior parte dei software per server Web, per impostazione predefinita, PHP espone la versione in esecuzione tramite un'intestazione HTTP X-Powered-By. Sebbene questa di per sé non sia una vulnerabilità della sicurezza, come in qualsiasi altra situazione, l'enumerazione delle versioni del software è generalmente utile per gli aggressori durante la fase di ricognizione di un attacco. Pertanto, disabilitando la versione PHP, renderesti un attacco un po' più difficile da riuscire.

Fortunatamente, questo è facile da disabilitare usando l'impostazione expone_php. Nel tuo file di configurazione php.ini , aggiungi semplicemente quanto segue.

expose_php = Off

Rimuovere eventuali file phpinfo()

La creazione di un file PHP utilizzando la funzione phpinfo() da utilizzare per il debug è una cattiva abitudine comune a molti amministratori di sistema PHP. Se un utente malintenzionato si imbatte in un file "phpinfo" (di solito, non sorprendentemente chiamato, phpinfo.php), riceve una vasta gamma di informazioni e dettagli non solo sulla versione di PHP in esecuzione sul server, ma anche su altri aspetti del sito Web come come server web e database.

Se hai davvero bisogno di eseguire phpinfo(), è molto più preferibile farlo dalla riga di comando, come segue.

php -i

Se hai più di una configurazione di PHP sul tuo sistema (molto comune), puoi usare il seguente comando per specificare quale file php.ini usare.

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

Elimina gli errori e gli avvisi PHP

Sebbene errori, avvisi ed eccezioni siano utili durante lo sviluppo, se visualizzati in un ambiente pubblico, gli aggressori utilizzeranno spesso queste informazioni per ottenere informazioni dettagliate sulla configurazione del server, sul layout dell'applicazione e sui componenti.

I messaggi di errore sono alcuni dei percorsi più comuni per la divulgazione di informazioni, spesso divulgando informazioni come il percorso di installazione dell'applicazione e i dettagli sulla connettività del database. Invece di mostrare errori e avvisi, assicurati che queste informazioni siano registrate. Maggiori informazioni su questo argomento possono essere trovate nella documentazione ufficiale di PHP.

Fortunatamente, questo è facile da disabilitare usando l'impostazione display_errors. Nel tuo file di configurazione php.ini, aggiungi semplicemente quanto segue.

display_errors = Off
log_errors = On

Limita include

Le vulnerabilità di inclusione di file consentono a un utente malintenzionato di controllare un'istruzione PHP include(). Mentre PHP eseguirà qualsiasi codice PHP all'interno di un file che viene incluso, stamperà qualsiasi altra cosa (supponendo che sia in chiaro). Ciò significa che un utente malintenzionato che prende il controllo di una vulnerabilità di inclusione di file può finire per eseguire qualcosa di simile al seguente, dando loro accesso a file di sistema sensibili. Per saperne di più sull'inclusione di file, dai un'occhiata a questo articolo.

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

Impostando l'impostazione open_basedir in php.ini, puoi indicare a PHP di consentire solo include all'interno di una determinata directory e sotto. Sebbene ciò non elimini le vulnerabilità di inclusione di file, le rende sicuramente più limitate e ostacola anche alcuni attacchi più avanzati che possono portare all'esecuzione di codice (quando un utente malintenzionato può eseguire comandi sul tuo server).

Puoi impostare l'impostazione PHP open_basedir come segue nel tuo file php.ini.

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

Disabilita file remoto include

Oltre a limitare le inclusioni locali a una directory specifica usando open_basedir, è anche consigliabile disabilitare le inclusioni remote. Gli attacchi di inclusione di file remoti (RFI) funzionano in modo simile agli attacchi di inclusione di file locali, ma invece di vincolare un utente malintenzionato ai file nel sistema, l'inclusione di file remoti consente a un utente malintenzionato di includere file sulla rete. Questo è estremamente pericoloso e la maggior parte degli attacchi RFI finisce in un utente malintenzionato in grado di eseguire arbitrariamente codice sul tuo server web (denominato esecuzione di codice remoto o RCE).

Per disabilitare l'inclusione di file remoti, utilizzare le opzioni PHP allow_url_fopen e allow_url_include nel file php.ini come segue.

allow_url_fopen = Off
allow_url_include = Off

Disabilita o limita le funzioni pericolose

Nel caso in cui un aggressore, nonostante tutte le tue misure di sicurezza, riesca a trovare una vulnerabilità nella sicurezza PHP del tuo WordPress, che può sfruttare, l'ultima cosa che vuoi è che sia in grado di eseguire codice arbitrario sul tuo server . Se un utente malintenzionato è in grado di eseguire codice arbitrario sul tuo server, è probabile che installi una webshell o stabilisca una shell inversa per controllare ulteriormente il tuo server e utilizzarlo per eseguire le sue offerte nefaste (come diffondere malware, utilizzare il tuo sito Web per campagne di phishing o negare di attacchi ai servizi, o anche mining di criptovaluta).

Disabilitando funzioni come shell_exec() e system(), puoi impedire agli utenti e agli aggressori di utilizzare queste funzioni pericolose. Sebbene possano esserci ragioni legittime per utilizzare queste funzioni, sono pochissime e lontane tra loro e di solito esiste un modo più sicuro per ottenere lo stesso risultato.

Attenzione : testare accuratamente quanto segue in un ambiente di test o staging prima di eseguirlo in produzione, poiché alcuni software/plugin in esecuzione potrebbero (si spera legittimamente) dipendere da queste funzioni.

Quella che segue è una raccolta di funzioni potenzialmente pericolose che potresti voler disabilitare in PHP usando l'impostazione disable_functions nel tuo file 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>

Blocca l'esecuzione di PHP nelle directory sensibili

Per impostazione predefinita, la directory wp-content/uploads , utilizzata per caricare temi, plug-in, immagini, video e altri file sul tuo sito Web, può eseguire codice PHP. Questo è un po' rischioso: se un utente malintenzionato è in qualche modo in grado di sfruttare una vulnerabilità di caricamento di file in un plug-in o in un tema, potrebbe essere in grado di caricare una webshell o un tipo simile di backdoor. Poiché l'esecuzione di PHP sarebbe consentita all'interno della directory wp-content/uploads , l'attaccante potrebbe essere in grado di eseguire effettivamente quel codice PHP per eseguire le proprie offerte dannose.

Prevenire ciò è in realtà abbastanza semplice: disabilitare l'esecuzione di PHP all'interno di wp-content/uploads e nella directory. Il modo ingenuo sarebbe semplicemente bloccare l'accesso ai file *.php in questo modo usando .htaccess .

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

Tuttavia, la configurazione di cui sopra è relativamente facile da aggirare: nella maggior parte dei casi PHP eseguirà volentieri file .phtml .php3. Il modo più a prova di proiettile sarebbe disabilitare letteralmente il motore PHP all'interno della directory. La seguente configurazione .htaccess dovrebbe essere inserita nella directory wp-content/uploads e nella directory wp-includes (un'altra directory comunemente presa di mira dagli aggressori).

php_flag engine off

Sicurezza PHP per WordPress: considerazioni finali

Mentre WordPress stesso deve essere considerato una piattaforma robusta e sicura, l'ambiente e l'infrastruttura su cui gira l'installazione di WordPress fanno molto per garantire la sicurezza del tuo sito web nel suo insieme. L'implementazione degli argomenti trattati in questa guida al rafforzamento della sicurezza PHP ti fornirà una seconda linea di difesa, rendendo molto più difficile per un utente malintenzionato intensificare un attacco dopo aver abusato di una vulnerabilità all'interno del tuo sito Web WordPress.

Se vuoi saperne di più su come rafforzare il tuo sito WordPress, leggi la nostra guida definitiva sulla sicurezza e l'indurimento di WordPress.

Riferimenti utilizzati in questo articolo [ + ]

Riferimenti utilizzati in questo articolo
1 https://www.php.net/supported-versions.php