Parimad PHP tugevdamise turvanõuanded Linuxi serverite jaoks


Pole midagi hullumeelset, et PHP on üks enimkasutatavaid serveri skriptimise programmeerimiskeeli. Ründajal on mõistlik leida erinevaid viise, kuidas ta saaks PHP-ga manipuleerida, kuna see on sageli seotud MySQL-iga ja võimaldab juurdepääsu teie kasutajate privaatandmetele.

Mingil juhul ei väida me, et PHP on haavatav või sellel on vaikimisi tõsiseid probleeme, kuid peame veenduma, et kohandame PHP-d nii, et see oleks tugevam kui kunagi varem.

1. Eemaldage mittevajalikud PHP moodulid

Vaikimisi saate PHP-moodulite komplekti, mis võivad olla abiks mitmesuguste ülesannete täitmisel, kuid mõned mittevajalikud moodulid ei pruugi iga projekti jaoks kasulikud olla. Saadaolevate PHP moodulite loetlemiseks kasutage antud käsku:

$ php -m

Moodulid asuvad kataloogis /etc/php.d/ ja neid saab hõlpsasti muuta meie praeguse kataloogi /etc/php.d/, kasutades järgmist käsku cd.

cd /etc/php.d/

Põhjus, miks me moodulite eemaldamiseks kataloogi muudame, on see, et mooduleid nimetatakse algses kataloogis üsna erinevalt. Nüüd loetlege saadaolevad moodulid antud käsuga:

$ ls

Näiteks eemaldame curl mooduli, kasutades antud käsku:

$ sudo rm -r 20-curl.ini

2. Keela PHP koodi kaugkäivitamine

Enamikul juhtudel ei saa kaugühendusi usaldada. Kui keelate juurdepääsu fopen-ümbristele, pääsevad nad juurde ainult kohalikele failidele. Fopeni keelamiseks peame avama PHP konfiguratsioonifaili, kasutades antud käsku:

$ sudo nano /etc/php.ini

Nüüd kasutage CRTL + w ja tippige allow_url_fopen, mis suunab meid kindlatele ridadele, kust me need valikud keelame.

allow_url_fopen=Off
allow_url_include=Off

Kui olete muudatustega lõpetanud, salvestage konfiguratsioonifail CTRL + O abil ja vajutage sisestusklahvi.

3. Keela PHP teabeleke

Kui see pole keelatud, saab maailm hõlpsasti tuvastada, millist PHP versiooni meie veebiserver praegu kasutab. See ei pruugi tunduda suure asjana, kuid ründajale täpse versiooni teada andmine võib olla ohtlik.

$ sudo nano /etc/php.ini

Nüüd muutke vaikeseadeteks \Väljas.

expose_php=Off

4. Keela PHP vealogid

Vaikimisi on kõik meie veebiserveri vead meie külastajatele, sealhulgas ründajatele nähtavad. Tagamaks, et ükski viga pole kellelegi nähtav, peame oma PHP konfiguratsioonifailis muutma.

$ sudo nano /etc/php.ini

Ja muutke vealogide kuvamise vaikeseadeks \Väljas.

display_errors = Of

Aga mis siis, kui olete arendaja ja teil on arendusprobleemide lahendamiseks vaja vealoge? Ärge muretsege, logifailid on võimalik hankida, tehes samas konfiguratsioonifailis väikese muudatuse.

Peame lihtsalt lubama logi_errors ja andma faili error_log tee, kuhu meie logifailid salvestatakse.

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

5. PHP ressursside juhtimine

Meie sõnul on PHP turvamisel kõige olulisem osa ressursside haldamisest. Siin eraldame kindlaksmääratud täitmisaja, sisestusaja ja mälulimiidi, nii et kui meie skript satub mingil moel ohtu, peatatakse täitmine teatud aja pärast.

Oleme valinud täitmiseks ja sisestusajaks 25 sekundit ning 30 MB mälulimiidi. Muidugi saate seda vastavalt oma vajadustele kohandada.

max_execution_time = 25
max_input_time = 25
memory_limit = 30M

6. Piirake juurdepääsu PHP-failidele

Failidele juurdepääsu piiramiseks lubame funktsiooni open_basedir, mis tagab, et PHP saab kaasata ainult faile meie loetletud kataloogidest.

Tähtis: see blokeerib kõik muud kataloogid ja nõuab meilt oluliste kataloogide käsitsi lisamist, mis hõlmab ka ajutiste failide ja seansikataloogide lisamist.

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

7. Konfigureerige PHP-failide üleslaadimine

Kui teie rakendus ei nõua failide üleslaadimist kasutaja poolt, on alati soovitatav failide üleslaadimine keelata. See takistab ründajatel ohtlike skriptide üleslaadimist, mis võivad lõpuks kahjustada kogu rakendust.

file_uploads = Off

Aga mis siis, kui teie rakendus on loodud failide hankimiseks kasutajalt? Sel juhul peate lubama failide üleslaadimise, kuid püüdma vähendada maksimaalset ruumi ja vähendada maksimaalselt ühe taotlusega üleslaaditavate failide arvu.

file_uploads = On
upload_max_filesize = 1M
max_file_uploads = 1

PHP-s paigutatakse ajutised failid vaikimisi kataloogi, kuhu kõik süsteemi kasutajad saavad kirjutada. Vaikeasukoht tuleb lülitada turvalisemasse kohta ja veenduda, et see ei asuks veebijuures.

Kuna oleme kasutanud open_basedir-i, kasutame sama asukohta, kus oleme selle juba lubatud loendisse lisanud.

upload_tmp_dir = /var/lib/php/tmp_upload

8. Keela ohtlikud PHP funktsioonid

PHP-l on vaikimisi lubatud mitmesugused funktsioonid ja need võivad olla abiks arenduse jaoks. Kuid häkkerid saavad meie veebiserveri ärakasutamiseks kasutada paljusid funktsioone ja nende keelamine lisab turvalisuse kihi.

Meil on keelatud funktsioonide komplekt ja kontrollige need enne konfiguratsioonifailis muudatuste tegemist kindlasti üle.

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

9. Muutke SOAP-i vahemälu kataloogi

Kuna muutsime ajutist vaikekataloogi ja seanssi, kehtib sama ka SOAP-i vahemälu kohta, kuna seda ei tohiks vaikekataloogi salvestada. Veenduge, et see oleks salvestatud kindlasse kohta.

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

10. Kontrollige PHP POST-i suurust

POST-i suurust reguleerides saame kaitsta oma serverit häkkerite eest, kes üritavad suuri faile saates serveriressursse ummistada. See säästab meid soovimatute serveri krahhide ja aeglase reageerimisaja eest.

post_max_size=4M

11. Kaitske PHP konfiguratsioone

Mittevajalike failide eemaldamisel eemaldame sageli mõned olulised failid või isegi kataloogid. Seega peame sätteid kohandama nii, et isegi juurkasutajad ei saaks neid kustutada. Failide ja kataloogide loomiseks kasutame erinevate lippudega chattrit.

Kui olete antud käsu kasutanud, ei saa te enam konkreetset faili muuta ega seda eemaldada.

$ sudo chattr +i /etc/php.ini

Püüdes muuta muutumatut faili, kuvatakse tõrketeade \Toiming pole lubatud.

$ sudo rm -r /etc/php.ini

Aga mis siis, kui soovite nende failide kirjutamist jätkata, muutes need muutumatuks? Saate selle hõlpsalt saavutada, kui kasutate +i asemel lippu +a.

$ sudo chattr +a /etc/php.ini

Võib juhtuda, et te ei vaja enam vana konfiguratsioonifaili ja sel juhul peame atribuudid tühistama.

$ sudo chattr -i /etc/php.ini

Samamoodi, kui kasutasite failide muutumatuks muutmisel atribuute +a, saate selle tagasi pöörata, kasutades antud käsku:

$ sudo chattr -a /etc/php.ini

12. Kasutage HTTPS-i jaoks SSL-sertifikaate

Tänapäeval soovitavad kõik kaasaegsed brauserid, nagu Google Chrome, Firefox, Opera ja teised, kasutada veebiserverites HTTPS-i. Kuna HTTPS pakub turvatud ja krüpteeritud juurdepääsukanalit ebausaldusväärsetele saitidele, saame pakkuda oma kasutajatele usaldusväärset kogemust.

HTTPS-i lisamisega saame end kaitsta XSS-i rünnakute eest, sealhulgas takistada häkkeritel edastatud andmeid koodide abil lugeda.

HTTPS-i lubamiseks installime ja kasutame serverisse tasuta Let’s Encrypt SSL sertifikaati.

$ 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. Värskendage PHP-d regulaarselt

Kuna tegemist on avatud lähtekoodiga keelega, parandatakse seda peaaegu iga päev. See ei pruugi tunduda kuigi oluline samm, kuid võib teid päästa suurest haavatavusest. Seega hoidke oma PHP-paketid kindlasti ajakohasena, mis säästab teid paljudest võimalikest haavatavustest.

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

See oli meie seisukoht selle kohta, kuidas saate hõlpsasti PHP turvalisust Linuxi süsteemides suurendada. Kogu selle õpetuse jooksul oleme püüdnud asju võimalikult lihtsaks teha ja kui teil on endiselt kahtlusi, andke meile kommentaarides teada.