Siekiant išvengti virtualiai dedikuoto serverio darbo sutrikimo dėl trečiųjų šalių kaltės privalu nuolat stiprinti serverio saugumo lygius. Šiame straipsnyje pateikiame 15 patarimų kurie pagelbės stiprinant PHP saugumą.
PHP konfigūracinis failas randamas aplanke /etc .
0. Rekomenduojame naudoti PHP
5.3.X arba PHP
5.4.X versijas.
PHP 5.2.X palaikymas iš PHP kūrėjų yra nutrauktas.
1. allow_url_fopen (funkcija įjungta pagal nutylėjimą)
Ši funkcija PHP aplikacijose leidžia išgauti duomenis iš nutolusių šaltinių (FTP, HTTP). Jei trečiosios šalys gali manipuliuoti šia PHP direktyva, tuomet labai lengva įkrauti informaciją ar jos dalį iš nutolusio serverio netalpinant kenkėjiškų failų tiesiogiai jūsų serveryje.
Rekomenduojama šios direktyvos nuostata:
allow_url_fopen Off
2. allow_url_include (funkcija išjungta pagal nutylėjimą)
Išjungus šią funkcija blokuojami failai kurie gali būti įkraunami iš išorinių nuorodų. Jei ši funkcija išjungta, tačiau palikta allow_url_fopen direktyvą įjungta, tuomet trečiosios šalys vis tiek gali įkrauti informaciją iš nutolusių serverių.
Rekomenduojama šios direktyvos nuostata:
allow_url_include Off
3. disable_functions = curl_exec,curl_multi_exec,dl,exec,fsockopen,parse_ini_file,passthru,popen,proc_open,proc_close,shell_exec,
show_source,symlink,system
Ši direktyva leidžia išjungti specifines PHP funkcijas, taip sumažinant riziką jog bus pasinaudojama PHP aplikacijos spragomis.
Prieš išjungdami PHP funkcijas atydžiai patikrinkite ar jos nėra naudojamos jūsų tinklalapyje.
Rekomenduojama šios direktyvos nuostata:
disable_functions =
Išjungiamų funkcijų paaiškinimas:
- curl_exec - inicijuojama cURL sesija
- curl_multi_exec - inicijuojami papildomi susijungimai cURL sesijos metu
- dl - įkraunamas PHP plėtinys PHP vykdymo metu
- exec - išorinės komandos vykdymas
- fsockopen - atidaromas unix arba www prievadas (port)
- parse_ini_file - įkraunamas konfigūracinis .ini failas
- passthru - vykdoma išorinė programa ir pateikiami neformatuoti rezultatai
- popen - atidaroma vykdomo failo rodyklė
- proc_open - įvykdoma komanda ir atidaromas failas informacijos įvedimui / išvedimui
- proc_close - uždaromas failas iššauktas proc_open komandos, pateikiamas uždarymo PID
- shell_exec - vykdoma shell komanda
- show_source - rodomas failo šaltinis
- symlink - sukuriama nuoroda į failą
- system - įvykdoma išorinė programa ir pavaizduojamas rezultatas
4. display_errors
Ši PHP direktyva pateikia PHP klaidas esant PHP aplikacijos kodo klaidoms. PHP aplikacijos klaidose gali būti pateikiama informacija aktuali trečiosioms šalims siekiančioms sukompromituoti jūsų tinklalapį ir/ar serverį.
Rekomenduojama šios direktyvos nuostata:
display_errors = Off ir
log_errors = On
5. expose_php
Ši direktyva nustato ar PHP versija yra rodoma trečiosioms šalims. Žinant PHP versiją galima išnaudoti žinomus pažeidžiamumus (ypač jei PHP versija nėra naujausia).
Rekomenduojama šios direktyvos nuostata:
expose_php = Off
6. magic_quotes_gpc (kai kuriose Linux distribucijose ši nuostata yra įjungta)
Ši nuostata suteikia bazinę apsaugą nuo galimų SQL injekcijų. Nepaisant to, ji nėra efektyvi ir jos naudojimas taipogi nėra skaitomas racionaliu. Apsaugą nuo SQL injekcijų rekomenduotina diegti PHP aplikacijų lygyje,
Rekomenduojama šios direktyvos nuostata:
magic_quotes_gpc = Off
7. memory_limit
Ši direktyva aprašo virtualios atminties kiekį skiriamą 1 PHP procesui. Pasirinkus neracionalų memory_limit dydį atveriamas kelias DoS tipo atakai. Ši direktyva konfigūruojama pagal specifinį poreikį. Didinkite ją virš rekomenduotinos reikšmės tik tada jei iš tiesų nėra kito pasirinkimo.
Rekomenduojama šios direktyvos nuostata:
memory_limit = 8M
8. open_basedir
open_basedir direktyva apriboja PHP failų naudojimą už vartotojo nustatyto aplanko ribų. Nustatykite open_basedir (jei naudojama) tik ties tuo aplanku kurį norite jog lankytojai matytų.
Pavyzdinė rekomenduojama šios direktyvos nuostata:
open_basedir = "/var/www/html/:/usr/local/php/"
9. post_max_size
Ši direktyva riboja duomenų kiekį perduodama POST metodu. Trečiosios šalys gali sukompromituoti serverio resursus siųsdami daugybę POST tipo užklausų ir taip išnaudodami serverio atmintį.
Rekomenduojama šios direktyvos nuostata:
post_max_size = 256K
10. register_globals
Šią direktyvą naudoja senesnės PHP aplikacijos. Ji leidžia automatiškai kurti kintamuosius. Ši direktyva turėtų būti visuomet išjungta.
Rekomenduojama šios direktyvos nuostata:
register_globals = Off
11. save_path
Ši direktyva aprašo aplanką kuriame kuriamos sesijos. Sesijų saugojimo aplankas turėtų būti virš vartotojams prieinamo aplanko.
Pavyzdinė rekomenduojama šios direktyvos nuostata:
session.save_path = "/var/lib/php/session"
12. upload_max_filesize
Ši direktyva nustato maksimalų 1 failo dydį kurį galima įkelti naudojant PHP aplikaciją. Trečiosios šalys mėgindamos sukompromituoti jūsų serverio sklandų darbą gali mėginti įkelti itin didelius failus taip visiškai išnaudodami jūsų serveryje esančius resursus.
Pavyzdinė rekomenduojama šios direktyvos nuostata:
upload_max_filesize = 8M
13. upload_tmp_dir
Ši direktyva aprašo aplanko kelią, kuriame saugojami laikini failai su kuriais dirba PHP aplikacija. Aplankas Negali būti pasiekiamas įprastiems vartotojams.
Pavyzdinė rekomenduojama šios direktyvos nuostata:
upload_tmp_dir = "/tmp"
14. use_trans_sid
Ši direktyva nusako ar sausainėliuose (Cookies) yra matomas sesijos numeris (PHPSESSID). Jei ši informacija yra matoma, tuomet trečiosioms šalims perėmus aktyvią sesiją įmanoma perimti slaptą informaciją.
Rekomenduojama šios direktyvos nuostata:
session.use_trans_sid = 0
Komentarai
shell _exec > shell_exec
parse_ ini_file > parse_ini_file
Tarpai nereikalingi.