Els millors consells de seguretat per reforçar PHP per a servidors Linux


No és gens clar que PHP sigui un dels llenguatges de programació de scripts de servidor més utilitzats. Té sentit que un atacant trobi diverses maneres de manipular PHP, ja que sovint es combina amb MySQL i permet l'accés a les dades privades dels vostres usuaris.

De totes maneres, no estem afirmant que PHP sigui vulnerable o tingui problemes greus per defecte, però ens hem d'assegurar que ajustem PHP de manera que pugui ser més robust que mai.

1. Elimina els mòduls PHP innecessaris

Per defecte, obteniu un conjunt de mòduls PHP que poden ser útils en diverses tasques, però alguns mòduls innecessaris poden no ser útils per a cada projecte. Per llistar els mòduls PHP disponibles, utilitzeu l'ordre donada:

$ php -m

Els mòduls es troben al directori /etc/php.d/ i poden canviar fàcilment el nostre directori actual a /etc/php.d/ utilitzant la següent comanda cd.

cd /etc/php.d/

La raó per la qual estem canviant el directori per eliminar mòduls és que els mòduls s'anomenen de manera molt diferent al directori original. Ara, llista els mòduls disponibles mitjançant l'ordre donada:

$ ls

Per exemple, eliminem el mòdul curl utilitzant l'ordre donada:

$ sudo rm -r 20-curl.ini

2. Desactiveu l'execució remota de codi PHP

En la majoria dels casos, no es pot confiar en les connexions remotes. En desactivar l'accés als embolcalls fopen, només poden accedir als fitxers locals. Per desactivar fopen, hem d'obrir el fitxer de configuració PHP utilitzant l'ordre donada:

$ sudo nano /etc/php.ini

Ara, utilitzeu CRTL + w i escriviu allow_url_fopen que ens portarà a línies específiques des d'on desactivarem aquestes opcions.

allow_url_fopen=Off
allow_url_include=Off

Un cop hàgiu acabat amb els canvis, deseu el fitxer de configuració amb CTRL + O i premeu Enter.

3. Desactiveu la filtració d'informació PHP

Quan no està desactivat, el món pot identificar fàcilment quina versió de PHP utilitza actualment el nostre servidor web. Això pot no semblar un gran problema, però fer que l'atacant sàpiga la versió exacta pot ser perillós.

$ sudo nano /etc/php.ini

Ara, canvieu els valors predeterminats a \Off.

expose_php=Off

4. Desactiveu els registres d'errors de PHP

Per defecte, cada error del nostre servidor web és visible per als nostres visitants, inclosos els atacants. Per garantir que cap dels errors sigui visible per a ningú, hem de fer canvis al nostre fitxer de configuració PHP.

$ sudo nano /etc/php.ini

I canvieu la configuració predeterminada de mostrar els registres d'errors a \Off.

display_errors = Of

Però, què passa si sou un desenvolupador i necessiteu tenir registres d'errors per superar els problemes de desenvolupament? No us preocupeu, hi ha una manera d'obtenir els vostres fitxers de registre només fent un petit canvi al mateix fitxer de configuració.

Només hem d'habilitar log_errors i donar un camí a error_log on s'emmagatzemaran els nostres fitxers de registre.

log_errors=On
error_log=/var/log/httpd/php_scripts_error.log

5. Control de recursos PHP

Segons nosaltres, la gestió dels recursos és la part més crucial a l'hora de garantir PHP. Aquí, assignarem una quantitat fixa de temps d'execució, temps d'entrada i límit de memòria, de manera que si d'alguna manera el nostre script es veu compromès, l'execució s'aturarà després d'un temps determinat.

Hem escollit 25 segons per al temps d'execució i entrada i 30 MB de límit de memòria. Segur que el podeu personalitzar segons les vostres necessitats.

max_execution_time = 25
max_input_time = 25
memory_limit = 30M

6. Restringeix l'accés a fitxers PHP

Per restringir l'accés als fitxers, habilitarem open_basedir que garantirà que PHP només pugui incloure fitxers dels nostres directoris llistats.

Important: això bloquejarà tots els altres directoris i ens requereix afegir directoris importants manualment, que també inclou afegir fitxers temporals i directoris de sessió.

open_basedir = "/home/sagar/public_html:/var/lib/php/tmp_upload:/var/lib/php/session"

7. Configura les càrregues de fitxers PHP

Si la vostra aplicació no requereix carregar fitxers des de l'usuari, sempre es recomana desactivar la càrrega de fitxers. Això evita que els atacants pugin scripts perillosos que al final podrien acabar danyant tota l'aplicació.

file_uploads = Off

Però, què passa si la vostra aplicació està dissenyada per obtenir fitxers de l'extrem de l'usuari? En aquest cas, haureu d'habilitar les càrregues de fitxers, però intenteu reduir el màxim d'espai i reduir el nombre màxim de fitxers que es poden carregar des d'una sola sol·licitud.

file_uploads = On
upload_max_filesize = 1M
max_file_uploads = 1

A PHP, per defecte, els fitxers temporals es col·loquen en un directori que tots els usuaris del sistema poden escriure. La ubicació predeterminada s'ha de canviar a un lloc més segur i assegurar-se que no es troba a l'arrel web.

Com que hem utilitzat open_basedir, farem servir la mateixa ubicació que ja l'hem inclosa a la llista blanca.

upload_tmp_dir = /var/lib/php/tmp_upload

8. Desactiveu les funcions PHP perilloses

PHP té diverses funcions habilitades per defecte i pot ser útil per al desenvolupament. Però els pirates informàtics poden utilitzar moltes funcions per explotar el nostre servidor web i desactivar-les afegirà una capa de seguretat.

Tenim un conjunt de funcions desactivat i assegureu-vos de comprovar-les abans de fer canvis al fitxer de configuració.

disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

9. Canvia el directori de la memòria cau SOAP

Com que hem canviat el directori temporal i la sessió predeterminats, el mateix s'aplica a la memòria cau SOAP, ja que no s'hauria de desar al directori predeterminat. Assegureu-vos que s'ha desat en un lloc segur.

soap.wsdl_cache_dir = /var/lib/php/soap_cache

10. Controlar la mida PHP POST

En controlar la mida POST, podem protegir el nostre servidor d'un pirata informàtic que intenti coagular els recursos del servidor enviant fitxers enormes. Això ens estalvia de bloquejos no desitjats del servidor i temps de resposta lent.

post_max_size=4M

11. Protegiu les configuracions PHP

Mentre eliminem fitxers innecessaris, sovint eliminem alguns fitxers crucials o fins i tot directoris. Per tant, hem d'ajustar la configuració de manera que fins i tot els usuaris root no els puguin suprimir. Per crear fitxers i directoris, utilitzarem chattr amb diferents banderes.

Un cop utilitzeu l'ordre donada, ja no podeu modificar un fitxer específic ni eliminar-lo.

$ sudo chattr +i /etc/php.ini

Quan s'intenta eliminar un fitxer immutable, es mostrarà un error que diu Operació no permesa.

$ sudo rm -r /etc/php.ini

Però, què passa si voleu seguir escrivint aquests fitxers mentre els feu immutables? Podeu aconseguir-ho fàcilment utilitzant el senyalador +a en comptes de +i.

$ sudo chattr +a /etc/php.ini

Pot ser que hi hagi alguns casos en què ja no necessiteu l'antic fitxer de configuració i, en aquest cas, haurem de desactivar els atributs.

$ sudo chattr -i /etc/php.ini

De la mateixa manera, si heu anat amb els atributs +a en procés de fer que els fitxers siguin immutables, podeu revertir-ho utilitzant l'ordre donada:

$ sudo chattr -a /etc/php.ini

12. Utilitzeu certificats SSL per a HTTPS

Avui en dia, tots els navegadors moderns, com ara Google Chrome, Firefox, Opera i altres, recomanen utilitzar HTTPS per als servidors web. Com que HTTPS proporciona un canal d'accés segur i encriptat per a llocs no fiables, podem oferir una experiència fiable als nostres usuaris.

En afegir HTTPS, ens podem protegir contra els atacs XSS, inclosa la prevenció que els pirates informàtics llegeixin les dades transportades mitjançant codis.

Per habilitar HTTPS, instal·larem i utilitzarem el certificat SSL de Let's Encrypt gratuït al servidor.

$ sudo dnf install epel-release 
$ sudo dnf install certbot python3-certbot-apache mod_ssl
$ sudo certbot --apache -d domain.com   [For Apache]
$ sudo certbot --nginx -d domain.com    [For Nginx]

13. Actualitza PHP regularment

Com que és un llenguatge de codi obert, es corregeix gairebé dia a dia. Potser no sembla un pas molt important, però us pot salvar d'una vulnerabilitat important. Així que assegureu-vos de mantenir els vostres paquets PHP actualitzats, cosa que us estalviarà moltes vulnerabilitats possibles.

# yum update & yum upgrade    [On RHEL-based systems]
# apt update && apt upgrade   [On Debian-based systems]

Aquesta va ser la nostra opinió sobre com podeu millorar fàcilment la seguretat de PHP als sistemes Linux. Al llarg d'aquest tutorial, hem intentat fer les coses tan senzilles com hem pogut i si encara teniu cap dubte, feu-nos-ho saber als comentaris.