A PHP fájleléréssel kapcsolatos biztonsági megfontolásai

Default book

Mivel a PHP a szerveren képes minden olyan könyvtárat és folyamatot elérni, amire jogosultsága van, ha szükséges a szerver fájlrendszerében írási, olvasási, törlési feladatokat végeznie a kódnak, különös gondossággal kell a kódot megírni.

  • POST vagy GET paraméterrel beküldött értékeket sohasem szabad ellenőrzés nélkül a fájleléréshez használni. Az ellenőrzést Elsődlegesen javascripttel meg lehet oldani a kliens oldalon is, de a biztonsági szempontból csak a szerver oldali kód ellenőrizheti.
  • Figyelni kell a ../../../ jellegű beküldésekre és a /gyokerbol_indulo/filenev jellegű beküldésekre. erre lehet használni az realpath($url) függvényt, ami a megadott útvonalnak kiszámítja az igazi jelentését a szerveroldalon.
  • Ha a kliens oldalon fájlfeltöltést engedélyezünk, akkor a feltöltés során a rendszer egy átmeneti könyvtárba helyezi a feltöltött fájlt és a szerver oldali script onnan másolja a végleges helyére.
    • A kliens oldalon korlátozzuk le a feltöltött fájl méretét és kiterjesztését - ez a véletlen hibák ellen véd csak.
    • A szerver oldali script ellenőrzi a feltöltött fájl kiterjesztését és csak a megadott típusú állományt kezeli a továbbiakban. ellenprzi a feltöltött fájl méretét is.
    • A feltöltött fájl áthelyezése után a temporary könyvtárból ki kell törölni az átmeneti fájlt.
    • A feltöltött fájl könyvtárára a futtatható jogot le kell tiltani.
    • Ha a webrooton belül van a feltöltési könyvtár, akkor .htaccess-sel a közvetlen fájlelérést le kell tiltani. Ekkor persze nem lehet URL-t használni az eléréshez sem.
    • Különben olyan helyre kell menteni a fájlt, amely a webről nem érhető el és a letöltést külön php scripttel kell intézni.
    • Bizonyos fájlneveket tiltani kell. pl. COM1, /dev/ és hasonló.