Antroje dalyje apžvelgiami šiek tiek advanced būdai apsisaugoti nuo įsilaužimų, kadangi tobulėjant technologijoms, ir hakerių atakos tampa sudėtingesnės bei sukeliančios didesnių bėdų.

Failų apsaugojimas
Didžioji dalis web hostingo kompanijų serverių konfigūracijų yra lengvai nuspėjamos. Lygiai taip pat yra nuspėjami ir web tinklapių kūrėjai. Tarkime, galime nesunkiai atspėti, kad įterpiami failai (include’inami) guli www.saitas.lt/includes kataloge. Jei serveris nėra tinkamai sukonfiguruotas ar kitais būdais apsaugotas, mes, kreipęsi į šį katalogą, galime matyti visus jame gulinčius failus.

Įsivaizduokime, jog norime kad skirtingi mūsų puslapio skriptai bendrautų su duomenų baze, todėl sukuriame bendrą nustatymų failą, pavadiname jį “dbconnect.inc” arba panašiai ir įkeliame jį i “includes” katalogą. Deja, taip daro daugelis žmonių. Dažniausiai web serveris tokius failus supranta kaip default tekstinius, todėl davę užklausą į tokį failą, mes galėsime matyti prisijungimo į duomenų bazę duomenis.

Nuspėjamų pavadinimų failus nerekomenduojama talpinti į nuspėjamas vietas. Išeitis gali būti iškelti juos iš web serverio root katalogo, tokiu būdu nebus galima pasiekti jų iš išorės. Kad padidinti saugumą, galime jį taip pat užvadinti sunkiau nuspėjamu pavadinimu, taip pat, laikant katalogus web serverio pasiekiamumo ribose, būtina sudėti index.html failus, kurie būtų bent jau tušti, tokiu būdu neleidžiant matyti katalogo turinio.

PHP skriptuose niekada nenaudokite “.inc” failų plėtinių, pervadinkite juos į “.inc.php”. Tai užtikrins, kad failas būtų interpretuojamas PHP varikliuko, ir slaptažodžiai nepateks į ekraną. Net jei ir serveryje įvesta konfigūracija draudžianti gauti katalogo turinį (list), būtinai turėkite index.html failą, taip nereiks sukti galvos pasikeitus serverio nustatymams arba hostingo tiekėjui. Be abejo, dar stipriau yra iškart turėti ir .htaccess failus, kurie draustų matyti katalogo turinį.

Pasinaudoti minėtomis saugumo spragomis net nebūtina spėlioti - pakanka pateikti tinkamas užklausas googlui.

Slaptažodžio apsaugojimas
Dauguma tinklapių šiandien neapseina be administravimo įrankių ar TVS (turinio valdymo sistema). Kaip jau minėta pirmoje dalyje, šiuos skriptus įkelti galime į sunkiai nuspėjąmą katalogą, tačiau tai nėra tvirta apsauga. Daugumoje TVS vartotojams leidžiama pasikeisti savo slaptažodį. Vartotojas gali pasirinkti lengvai įsimenamą, trumpą slaptažodį. Be abejo, reikia nustatyti ir šiokias tokias slaptažodžio sukūrimo taisykles, ir neleisti vartotojui įvesti trumpesnį nei, tarkim, 6 simbolių slaptažodį, kuris turi būtinai turėti skaitmenį ar dar kokių spec. simbolių. Įsibrovėliai dažnai naudoja vadinamąsias “žodyno” atakas (”brute force” metodas). Žodyno ataka naudoja visus žodžius iš tam tikro sąrašo (žodyno) slaptažodžio įvedimui, kol šis atspėjamas.

Net ir sudėtingi slaptažodžiai anksčiau ar vėliau gali būti atspėti. Nuo šių atakų apsisaugoti paskutiniu metu itin išpopuliarėjo “captchas”, tai yra raidžių ir skaitmenų seka, kurią privalo įvesti vartotojas, norėdamas prisijungti. Ši seka turi būti sugeneruojama į paveikslėlį su įvairiais iškraipymais, ir kaskart turi būti pateikiama skirtingas atsitiktinių simbolių kratinys. Tai leidžia žinoti, kad sėkmingai prisijungs tik žmogus, kuris sugebės atpažinti raides ir skaičius, bet to nesugebės padaryti kenkėjiškas kompiuterinis skriptas.

Prisijungimo saugumą padidina ir elementarus skaitiklis. Bandymai prisijungti išsaugomi, ir tarkim, po 3 nesėkmingų sykių vartotojas tam tikram laikui yra deaktyvuojamas, tai yra negali prisijungti iš viso, o galbūt net privalo kreiptis į sistemos administratorius, kad rankiniu būdu būtų aktyvuotas vėl. Tai gali būti nepatogu vartotojams, tačiau labai naudinga galimybė. Sekdami vartotojo prisijungimus, laiką, IP adresus, žinosite kas ir kaip naudojasi sistema. Jei aptinkate didelį nesėkmingų bandymų prisijungti skaičių iš vieno IP adreso, galite jį tiesiog užblokuoti. Gal verta dėmesio galimybė ir suteikti prisijungimą tik iš nurodytų adresų, o visus kitus blokuojant? Paprasta, nepatogu, tačiau labai saugu.

Duomenų bazės saugumas
Šiandien itin didelis dėmesys skiriamas duomenų bazėms. Retas puslapis apseina be jų. Kai kurios atakos būna nukreiptos būtent į jas. Tai žinant, galima sumažinti jos atakos padarinius. Beveik visi duomenų bazių serveriai leidžia suteikti skirtingas privilegijas vartotojams. Galite (ne)suteikti vartotojui teises kurti, redaguoti, trinti ir daug kitų. Paprastai, duomenų bazės vartotojui, kuris dirba su duomenų bazę viešai, užtenka suteikti kūrimo ir redagavimo teises. Skriptai, kurie turi trinti tam tikrus duomenis, gali apsieiti ir be trynimo teisės, kuri gali būti skausminga. Duomenų bazės lentelėje įvedus papildomą lauką “deleted”, ir skriptui įvykdžius trynimo funkciją, įrašas paredaguojamas ir “deleted” laukui suteikiama reikšmė “1″. Su tokiais įrašas skriptas elgiasi taip, tarsi jie būtų ištrinti, nors realiai bet kada duomenis galėsite peržiūrėti ar atkurti. Vėliau, kai tikrai žinosite, jog duomenys tikrai nebereikalingi ir buvo ištrinti ne piktavalio, galėsite duomenis tikrai ištrinti. Jei duomenų bazės vartotojas negalės trinti įrašų ar naikinti lentelių, to negalės padaryti ir įsilaužėlis, sužinojęs jo prisijungimo duomenis.

Nesaugios funkcijos

PHP turi funkcijų, kurios gali atlikti sistemos nustatymus ar bendrauti su kitomis programomis. Jei žinote, kad jomis vistiek nesinaudosite, rekomenduojama jas išjungti.

Pavyzdžiui, funkcija eval() stringą interpretuoja kaip PHP komandą ir ją įvykdo. Jei šioje funkcijoje naudojami vartotojo įvedami duomenys, jis gali pridaryti nemažai žalos. Be itin atidaus įvedimo tikrinimo, vartotojas gali paleisti bet kokią programą.

Pirmiausia, reikia vengti naudoti eval() funkciją. PHP leidžia php.ini faile su direktyva “disable_functions” leidžia per kablelį nurodyti visas funkcijas, kurių vartojimas turi būti draudžiamas. Dažniausiai atjungiamos tokios funkcijos kaip: ini_set(), exec(), fopen(), popen(), passthru(), readfile(), file(), shell_exec(), system().

Dažnai verta įjungti ir safe_mode režimą serveryje. Šis režimas nurodo PHP apriboti funkcijų ir operatorių naudojimą, kurie gali sukelti problemų. Nuo to nukenčia funkcionalumas, tačiau jei įjungus safe_mode, skriptai vistiek tvarkingai veikia, šį nustatymą verta palikti. Saugaus režimo ir nesaugių funkcijų atjungimas yra būtinas hostingo kompanijose, kur vienu serveriu naudojasi daugelis vartotojų.
Antra dalis baigta. Didžiosios dalies saugumo problemų paprastai išvengiama tiesiog atidžiai tvarkantis su vartotojo įvedamais duomenimis. Jei Jūs galite tikėtis paties blogiausio ir pačių pikčiausių hakerių, vadinasi galite susitvarkyti su bet kuo.

Panašūs straipsniai


“PHP saugumas antra dalis” komentarų: 2

  1. Jonas

    Saunu :)

  2. Tomas

    ta dalis apie nasaugias php funcijas labai sultinga. dekui

Rašyti komentarą

Jūs privalote prisijungti jeigu norite rašyti komentarą.