Linux serwerleri üçin iň ýokary PHP berkitme howpsuzlyk maslahatlary


PHP-iň iň köp ulanylýan serwer skript programmirleme dillerinden biri. Hüjümçiniň PHP-ni manipulirlemegiň dürli usullaryny tapmagynyň manysy bar, sebäbi köplenç MySQL bilen jübütlenýär we ulanyjylaryňyzyň şahsy maglumatlaryna girmäge mümkinçilik berýär.

Her niçigem bolsa, PHP-ni gowşak goraýarys ýa-da öňünden käbir çynlakaý meseleler bar diýemzok, ýöne PHP-ni öňkülerinden has ygtybarly edip düzmelidigimize göz ýetirmeli.

1. Gereksiz PHP modullaryny aýyryň

Düzgüne görä, dürli meselelerde peýdaly bolup biljek PHP modullarynyň toplumyny alarsyňyz, ýöne käbir gereksiz modullar her taslama üçin peýdaly bolup bilmez. Elýeterli PHP modullaryny sanamak üçin berlen buýrugy ulanyň:

$ php -m

Modullar /etc/php.d/ katalogynda ýerleşýär we aşakdaky cd buýrugyny ulanyp häzirki katalogymyzy /etc/php.d/ aňsatlyk bilen üýtgedip biler.

cd /etc/php.d/

Modullary aýyrmak üçin bukjany üýtgetmegimiziň sebäbi, modullaryň asyl katalogda düýpgöter başgaça atlandyrylmagydyr. Indi berlen buýruk boýunça elýeterli modullary sanaň:

$ ls

Mysal üçin, berlen buýrugy ulanyp, egri moduly aýyralyň:

$ sudo rm -r 20-curl.ini

2. Uzakdan PHP kod ýerine ýetirişini öçüriň

Köplenç uzakdaky birikmelere ynanyp bolmaýar. Fopen örtüklere girişi ýapmak bilen, diňe ýerli faýllara girip bilerler. Fopen-i öçürmek üçin, berlen buýrugy ulanyp, PHP konfigurasiýa faýlyny açmaly:

$ sudo nano /etc/php.ini

Indi CRTL + w ulanyň we allow_url_fopen ýazyň, bu opsiýalary öçürjek ýerimizden belli setirlere düşer.

allow_url_fopen=Off
allow_url_include=Off

Üýtgeşmeler ýerine ýetirilenden soň, konfigurasiýa faýlyny CTRL + O ýazdyryň we Enter basyň.

3. PHP maglumat syzdyryşyny öçüriň

Öçürilmedik ýagdaýynda, häzirki wagtda web serwerimiz tarapyndan PHP-iň haýsy wersiýasyny ulanýandygyny dünýä aňsatlyk bilen kesgitläp biler. Bu uly bir zat ýaly bolup bilmez, ýöne hüjümçä takyk wersiýasyny habar bermek howply bolup biler.

$ sudo nano /etc/php.ini

Indi, deslapky tertipleri \Off üýtgediň.

expose_php=Off

4. PHP säwlik ýazgylaryny öçüriň

Düzgüne görä, web serwerimiziň her bir ýalňyşlygy, hüjümçileri hem öz içine alýanlara görünýär. Rorsalňyşlyklaryň hiç biriniň hiç kime görünmezligi üçin PHP konfigurasiýa faýlymyzda üýtgeşmeler girizmeli.

$ sudo nano /etc/php.ini

Erroralňyş ýazgylaryny görkezmegiň deslapky sazlamasyny \Off üýtgediň.

display_errors = Of

Developmentöne işläp düzüji bolsaňyz we ösüş meselelerini ýeňip geçmek üçin säwlik ýazgylary bolmaly bolsa näme etmeli? Alada etme, şol bir konfigurasiýa faýlynda azajyk üýtgeşme girizip, gündelik faýllaryňyzy almagyň bir usuly bar.

Diňe log_errors-y işletmeli we log faýllarymyzyň saklanjak error_log-a ýol bermeli.

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

5. PHP çeşmelerine gözegçilik

Biziň pikirimizçe, PHP üpjün edilende çeşmeleri dolandyrmak iň möhüm bölekdir. Bu ýerde, belli bir mukdarda ýerine ýetiriş wagtyny, giriş wagtyny we ýadyň çägini bölmekçi bolýarys, eger haýsydyr bir usul bilen skriptimiz bozulsa, ýerine ýetiriş belli bir wagtdan soň togtadylýar.

Executionerine ýetirmek we giriş wagty we 30 MB ýat çäkleri üçin 25 sekunt saýladyk. Islegleriňize görä düzüp bilersiňiz.

max_execution_time = 25
max_input_time = 25
memory_limit = 30M

6. PHP faýlyna girişi çäklendiriň

Faýl girişini çäklendirmek üçin, PHP-iň diňe sanawdaky kataloglarymyzdan faýllary öz içine alyp biljekdigini üpjün edýän open_basedir açarys.

Üns beriň: Bu beýleki ähli kataloglaryň sanawyny düzer we wagtlaýyn faýllary we sessiýa kataloglaryny goşmagy öz içine alýan möhüm kataloglary el bilen goşmagymyzy talap eder.

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

7. PHP faýl ýüklemelerini sazlaň

Programmaňyzda ulanyjynyň soňundan faýl ýüklemegi talap etmeýän bolsa, elmydama faýl ýüklemesini öçürmek maslahat berilýär. Bu hüjümçileriň howply skriptleri ýüklemeginiň öňüni alýar, netijede tutuş programma zeper ýetirip biler.

file_uploads = Off

Applicationöne programmaňyz ulanyjynyň soňundan faýl almak üçin döredilen bolsa näme etmeli? Bu ýagdaýda faýl ýüklemelerini işjeňleşdirmeli, ýöne iň köp ýer azaltmaga we ýekeje haýyşdan ýükläp boljak iň köp faýl sanyny azaltmaga synanyşmaly.

file_uploads = On
upload_max_filesize = 1M
max_file_uploads = 1

PHP-de, wagtlaýyn faýllar ulgam ulanyjylarynyň hemmesiniň ýazyp biljek katalogyna ýerleşdirilýär. Bellenen ýer has ygtybarly ýere geçmeli we web köküniň içinde däldigine göz ýetirmeli.

“Open_basedir” -i ulananymyz üçin, eýýäm ak sanawda görkezilen ýerimizi ulanarys.

upload_tmp_dir = /var/lib/php/tmp_upload

8. Howply PHP funksiýalaryny öçüriň

PHP deslapky görnüşde işledilen dürli funksiýalara eýedir we ösüş maksatlary üçin peýdaly bolup biler. Emma hakerler web serwerimizi ulanmak üçin köp funksiýalary ulanyp bilerler we olary öçürmek howpsuzlyk gatlagyny goşar.

Bizde ýapyk funksiýalar toplumy bar we konfigurasiýa faýlyna üýtgeşmeler girizmezden ozal olary barlamaly.

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

9. SOAP keş keşbini üýtgediň

Adaty temp katalogyny we sessiýasyny üýtgedenimizde, SOAP keş keşbine-de degişlidir, sebäbi adaty katalogda saklanmaly däl. Ygtybarly ýerde saklanandygyna göz ýetiriň.

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

10. PHP POST ululygyna gözegçilik ediň

POST ululygyna gözegçilik etmek bilen, serwerimizi ullakan faýl ibermek bilen serwer çeşmelerini ýapmaga synanyşýan hakerden gorap bileris. Bu bizi islenmeýän serwer heläkçiliginden we haýal jogap wagtyndan halas edýär.

post_max_size=4M

11. PHP konfigurasiýalaryny goraň

Gereksiz faýllary aýyranymyzda, köplenç käbir möhüm faýllary ýa-da kataloglary aýyrýarys. Şonuň üçin sazlamalary hatda kök ulanyjylaram pozup bilmez ýaly düzeltmeli. Faýllary we kataloglary ýasamak üçin, dürli baýdaklar bilen chattr ulanarys.

Berlen buýrugy ulananyňyzdan soň, belli bir faýly üýtgedip ýa-da aýryp bilmersiňiz.

$ sudo chattr +i /etc/php.ini

Üýtgemeýän faýly aýyrjak bolanyňyzda\Operasiýa rugsat berilmeýär diýlen ýalňyşlyk görkeziler.

$ sudo rm -r /etc/php.ini

Thoseöne şol faýllary üýtgewsiz edip ýazmagy dowam etdirmek isleseňiz näme etmeli? + i ýerine derek + a baýdagyny ulanyp, aňsatlyk bilen gazanyp bilersiňiz.

$ sudo chattr +a /etc/php.ini

Indi köne konfigurasiýa faýly gerek däl käbir ýagdaýlar bolup biler we bu ýagdaýda atributlary aýyrmaly bolarys.

$ sudo chattr -i /etc/php.ini

Şonuň ýaly-da, faýllary üýtgewsiz etmek prosesinde + a atributlary bilen giden bolsaňyz, berlen buýrugy ulanyp yzyna öwrüp bilersiňiz:

$ sudo chattr -a /etc/php.ini

12. HTTPS üçin SSL şahadatnamalaryny ulanyň

Häzirki wagtda Google Chrome, Firefox, Opera we beýlekiler ýaly häzirki zaman brauzerleriň hemmesi web serwerleri üçin HTTPS ulanmagy maslahat berýär. HTTPS ygtybarly saýtlar üçin ygtybarly we kodlanan giriş kanalyny üpjün edýändigi sebäpli, ulanyjylarymyza ygtybarly tejribe berip bileris.

HTTPS goşmak bilen, hakerleriň kodlary ulanyp daşalýan maglumatlary okamagynyň öňüni almak ýaly XSS hüjümlerinden goralyp bileris.

HTTPS-i işletmek üçin serwerde mugt Let Encrypt SSL şahadatnamasyny gurarys we ulanarys.

$ 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. PHP-ni yzygiderli täzeläň

Açyk çeşme dili bolansoň, gün-günden diýen ýaly gözlenýär. Möhüm ädim ýaly bolup görünmese-de, sizi esasy gowşaklykdan halas edip biler. Şonuň üçin PHP paketleriňizi täzeläp durmagy unutmaň, bu sizi köp sanly gowşak ýerlerden halas eder.

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

Bu, Linux ulgamlarynda PHP-iň howpsuzlygyny nädip aňsatlaşdyryp boljakdygy baradaky kararymyzdy. Bu gollanmanyň dowamynda zatlary mümkin boldugyça ýönekeýleşdirmäge synanyşdyk we henizem şübhelenýän bolsaňyz, teswirlerde bize habar bermegiňizi haýyş edýäris.