Aptikau tokį straipsnelį |a žurnale ir nutariau, kad visai pravers pakonspektuot, o ir Jums į naudą išeis.
standartinėje versijoje yra virš 500 nustatymų direktyvų. Šis skaičius gali išaugti, jei įdiegsite PECL ar kokių kitų išorinių modulių. Didžioji dalis nustatymų yra palikti veikti standartiškai (default), gali būti, kad jų judinti niekad ir neprireiks. Nenuostabu, kad turbūt nė vienas žmogus šių visų nustatymų negalėtų mintinai mokėti, tačiau yra keletas svarbesnių, susijusių su saugumu, į kuriuos verta atkreipti dėmesį. Pilnas nustatymų aprašymas yra čia.

nustatymai taip pat turi keletą “nustatomumo lygių”. Kai kurie nustatymai, pavyzdžiui, yra tik “system” tipo, tai reiškia, kad jį galima pakeisti tik . faile. Taigi priėjimas prie jo yra draudžiamas ir skriptams, ir web serveriui per virtualaus hosto nustatymus, ir .htaccess failui. sąraše tokie nustatymai žymimi “PHP_INI_SYSTEM”.
Kai kurie nustatymai turi “PHP_INI_PERDIR” lygį. Tokiu atveju nustatymas gali būti keičiamas . faile arba web serverio virtualaus hosto nustatymuose, arba jo .htaccess faile. Dažniausiai tokie nustatymai įtakoja, pavyzdžiui, vartotojo įvedamus duomenis, o jie yra apdirbami dar prieš startuojant skriptui, taigi skripto viduje (kad ir pirmoje eilutėje) kreipimasis pakeisti nustatymą neduotų jokio naudingo rezultato.
Didžioji nustatymų dalis patenka į “PHP_INI_ALL”, tai reiškia, kad nustatymas gali būti keičiamas bet kur, t.y. be jau minėtų būdų dar papildomai ir pačiame skripte per ini_set() funkciją.

Register globals
Neverta apie juos daug aušinti burnos. Tiesiog reikia išjungti ir tiek :) Nuo 4.1 versijos išjungti default, tačiau dėl senų skriptų palaikomumo būna daug kur įjungti (ypač shared-hostinge). Šis nustatymas paliečia vartotojų įvedamus duomenis dar prieš vykdant skriptą, todėl jį apdirbti racionaliausia . faile (register_globals=0), virtual host nustatymuose (php_admin_flag register_globals 0) arba .htaccess faile (php_flag register_globals 0). Patikrinti galime per phpinfo() funkciją arba ini_get(”register_globals”).

Magic Quotes
Panašiai kaip ir register globals gan nemenką žalą darantis nustatymas. “Magic_quotes_gpc” nustatymą verta išjungti ne tik dėl saugumo, bet ir dėl to, kad skriptai būtų vykdomi greičiau - automatinis visų duomenų eskeipinimas taip pat atima resursų, be to, galbūt visai nebūtinas, juk ne visi įvedami duomenys yra naudojami SQL užklausose. Magic_quotes veikia ne itin korektiškai ir vis tiek gali palikti spragų saugume. Tai įvedimo apdirbimo nustatymas, jis taip pat yra “PHP_INI_PERDIR” tipo. Dar vienas nustatymas “magic_quotes_runtime” yra panašus, tačiau priešingai nei “magic_quotes_gpc” yra išjungtas default’u. Bet kokiu atveju, verta patikrinti, jog abu jie būtų išjungti.

Open_basedir
Labai naudingas dalykas shared-hostinge, tam, kad kiti vartotojai, vykdydami skriptus per web serverį, negalėtų landžioti po jūsų failus. Nustatymas keičiamas tik per . failą arba apache virtual hostams. Kadangi atskiriems vartotojams reikia prieiti prie tam tikrų bendrų katalogų ir savo namų katalogo, tai nustatymo keitimas . faile yra beprasmis, reikia diferencijuoti šį parametrą pagal vartotojus. Pvz., php_admin_value open_basedir “/tmp/:/home/user1/”. Reikia atminti, kad būtina katalogą iš abiejų pusių atskirti slash’ais, nes užrašymas “/home/user1″ leis priėjimą ir prie /home/user1, ir prie /home/user123, ir kitiems katalogams, kurių pradžia būtent tokia, o tai jau yra rimta saugumo spraga.

Safe Mode
Šio nustatymo idėja buvo labai kilni, tačiau pavadinimas gali būti apgaulingas. Safe mode režimas apriboja daug nustatymų susijusių su saugumu, tačiau visus juos galima reguliuoti atskirai ir daug lanksčiau (apie juos kitoje dalyje). Vienas iš svarbiausių dalykų, kad safe mode režime, kai skriptas kreipiasi į failą, tikrinamas skripto savininkas ir failo savininkas. Jei jie sutampa, tuomet operacija leidžiama. Tačiau tokiu būdu galima lengvai prarasti priėjimą prie failų, kurie sukuriami pačių skriptų. Be to, šį apribojimą galima lengvai apeiti su daugeliu funkcijų, pvz. copy(). Nors safe_mode įjungimas ir nekenkia tiesiogiai, tačiau jis sukuria papildomo apkrovimo serveriui, tikrinant failo UID, todėl rekomenduojama išjungti ir protingai suderinti kitus saugumo nustatymus, taip pat atskiriant vartotojus į virtualius hostus bei naudojant gudrias priėjimo teises (chmod).

Expose
expose_php nustatymas įjungtas standartiškai, tačiau nauda iš jo menka, o žala didelė. Įjungimas reiškia, kad kiekvienos užklausos metu siunčiama informacija apie versiją naudojamą serveryje. O tai, be abejo, naudinga hackeriams, ieškantiems pažeidžiamų senesnių versijų, be to tai yra ir papildomi nereikalingi duomenys, naudojantys saito pralaidumą. Nebūtina visam pasauliui žinoti kokia kalba parašytas tinklapis. Statistikos rinkimui užtenka panaudoti kad ir header(”X-Powered-By: “); kuris nerodo versijos. expose_php nustatymas reguliuojamas tik . faile.

Display Errors
display_errors būna įjungtas default, o tai reiškia, kad visos klaidos bus išvedamos tiesiai į naršyklę. Be abejo, tokia informacija naudinga norintiems pakenkti. Geriausias variantas yra uždrausti lankytojams matyti klaidas, tačiau leisti programuotojui prie jų prieiti. Klaidų nustatymai gali būti keičiami visuose lygiuose (pačiame skripte - taip pat):

error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', '/var/home/user/logs/php.log');

Pabaiga
Pirmos dalies pabaiga :)
Originalus straipsnis čia.

Panašūs straipsniai


“PHP saugumo nustatymai - 1 dalis” komentarų: 5

  1. Slave

    Va, Display Errors būtent tai ką aš įsidėsiu sau į galvą. Ačiū, medutis, už smagų konspektą :) lauksim tęsinio

  2. Gudis

    :)log_errors naudingas dalykas

  3. Skiedrius

    Dėkui už trumpą straipsniuką, pravers. Visgi galvojau, kad ‘Magic Quotes’ saugus - pasirodo, kad ne ;)

  4. mrkiller

    Aš apie Expose PHP net nežinojau. Reikėtu Lietuvos hostingų adminams paskaityti… :D

  5. » Savaitgalio skaitiniai #10 Archyvas » Pixel.lt

    […] Sveiki, štai jau 10 skaitinių rubrika ir mums visai neblogai sekasi Šią savaitę publikavom medučio straipsnį PHP saugumo nustatymai - 1 dalis ir mano straipsnį apie Joost(tm) - Joost(tm) - televizija kompiuteryje - 100 straipsnis mūsų svetainėje! Skaitiniai šiam savaitgaliui: 7 Tips on How NOT to do BAD Programming Improve your forms using HTML5! Introduction to Python - Part 1 10 CSS Tips from a Professional CSS Front-End Architect 53 CSS-Techniques You Couldn’t Live Without AdSense Competitive Ads and Services Policy just got a lot tighter for publishers […]

Rašyti komentarą

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