PHP fájlok tiltása almappákban

Ez a blog elsősorban a keresőoptimalizálásra koncentrál, azon belül is a fő hangsúlyt a technikai SEO kapja. Ám alkalmanként kicsit távolabbi témákat is érintek, olyanokat melyek talán első ránézésre a keresőoptimalizáláshoz nincs is köze. Vagy csak nagyon-nagyon messziről.

Hallottam egy esetet, amikor feltörtek egy honlapot, az egyik al-al-almappában elhelyeztek egy PHP fájlt, amely sokáig backdoor-ként működött és szép lassan azon keresztül hihetetlen mennyiségű fake oldalt gyártottak le, amelyeken kétes oldalakat linkeltek. Mindez annyira sokáig működött, hogy végül olyan durva büntetést kaptak a Google-től, hogy a domain utána már szinte használhatatlan lett.

Ehhez persze nagyon sok hibát kellett elkövetni egyszerre, ám mégis azt gondolom, hogy nagyon sok honlap esetén ugyanez a támadás ugyanilyen végződéssel zárulna.

Egyik, amit könnyen meg tudunk tenni, hogy minden mappa esetén, amelyben nem szeretnénk, hogy bárki PHP fájlt futtasson, ott eleve tiltsuk le a PHP fájlokat. (Elsősorban itt az uploads és társaira gondolok. Így ha bármilyen módon fel is tudtak tölteni egy PHP fájlt, akkor az nem fog lefutni.)

Ezt többféleképpen lehetséges. Például, ha egy mappában (illetve annak almappáiban) tiltani szeretnénk a .php fájlok futtatását, akkor az adott mappában elhelyezett .htaccess fájlba a következő néhány sort kell írni:

<Files *.php>
Deny from all
</Files>

Érdemes arra ügyelni, hogy sok szerveren nem csak a .php fájlokat futtattja a szerver, hanem például a .phtml vagy a .php5 kiterjesztésű fájlokat is. Ebben az esetben a Files direktíva helyett a FilesMatch direktívára lesz szükségünk:

<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
Deny from all
</FilesMatch>

Erre már csak azért is érdemes figyelni, mert sajnos az is egy tipikus hiba, hogy a fájlfeltöltésnél a .php fájlokat nem engedik feltölteni, de a .phtml –t már igen.

Az általam használt rendszerben több könyvtár van, azok egyikében sincs semmilyen PHP fájl. Emiatt én a document root-ban lévő .htaccess fájlban a Rewrite modul segítségével oldom meg, hogy semelyik mappában ne futhasson PHP.

RewriteRule ^.*/.*\.ph(p[3457]?|t|tml)$ - [F,L]

Ehhez csak egy rövid magyarázatot fűznék. Két flag-et használunk itt, az F-fel tiltjuk a kérést, míg az L-lel megállítjuk a Rewrite modult, hogy más illeszkedés már ne módosíthassa a kérést.

Természetesen itt is meg kell említeni azt, hogy ennyivel még nem dőlhetünk hátra. Ezernyi támadási mód létezik... A fenti védelem csupán az ezernyi támadás közül az egyik ellen véd.

Ez a weboldal cookie-kat (sütiket) használ azért, hogy weboldalunk használata során a lehető legjobb élményt tudjuk biztosítani.