Gyakran előfordul, hogy a webszerveren kell tárolnunk olyan file-okat, amiket egyébként direktben nem szabad elérni a netről. Ilyenek pl. azok a php include file-ok, amik futás közben más file-okba ágyazódnak be. A htaccess segítségével könnyen letilthatjuk az egyes könyvtárak elérését az alábbi módon:
order allow,deny deny from all
Ebből a két sorból most a második, a "deny from all"a lényeges, ez mondja ki, hogy mindenhonnan tiltott a file elérése. A "mindenhonnan" azt jelenti, hogy minden olyan kérés esetében, amit a webszerver szolgál ki. A szerver saját file-rendszeréből elérhető, azaz pl. php programmal ki tudjuk olvasni, be tudjuk illeszteni, de közvetlenül, kívülről nem elérhető. Ez nagyon hatékony módja a könyvtár levédésének, ez ténylegesen megvédi a file-jainkat, ellentétben a könyvtár listázásának tiltásával.
Lehetőség van nem csak általános, hanem szelektív tiltásra is, pl. IP cím, vagy címtartomány alapján. Ez akkor lehet hasznos, ha egy konkrét támadót, vagy konkrét tartományt ki akarsz tiltani. A "deny from " kifejezés után kell beírni a letiltandó IP címet:
order deny,allow deny from 255.255.255.255
order allow,deny allow from all deny from digikabel.hu
order deny,allow deny from all allow from digikabel.hu
PÉLDA: Nézzük például az alábbi linket, itt az 1. módszer szerint le van tiltva a teljes könyvtár hozzáférése:
Az alábbi két példánál az IP szerinti tiltás, illetve engedélyezés van beállítva:
/denydirectory3/
/denydirectory4/
E közül a két link közül elvileg csak az egyiket tudod megnyitni. Néhány népszerű magyarországi szolgáltató (digikabel.hu, telekom.hu, t-online.hu, broadband.hu) hálózatából a másodikat, máshonnan és külföldről az elsőt.
Sajnos az egyes országok teljes kitiltása nem megy ilyen könnyen egy "deny from hu" elvileg tiltja a magyar tartományt, de csak abban az esetben működik, ha a szolgáltató automatikusan adja a tartományt is. Ha csak IP címet ad a szolgáltató, akkor a tiltás nem működik. A gyakorlatban általában jól karbantartott IP címtartomány listákat használnak, amelyben az országokhoz tartozó IP címtartományokat tartják nyilván. Ezek meglehetősen hosszúak, és jelentősen lassítják a szervert, ha nem a szerver konfigurációs file-jában, hanem a htaccess-ben állítgatjuk
A fenti példakódokban az utasítást mindig "order deny,allow" vagy "order allow,deny" sorral kezdtük. Mit is jelent ez pontosan, és mi a jelentősége? Aki ért angolul, az könnyen kitalálhatja, hogy a tiltás (deny) és a megengedés (allow) sorrendjét határozza meg. Ezen túl meghatározza az alapértelmezést is, mi van akkor, ha valamilyen tartományt nem fed le egy szabály sem. Talán kissé logikátlan, de a felsorolásban a második az "erősebb".
"order allow,deny" esetében a tiltás az alapértelmezés, azaz, ha valamit nem engedünk meg expliciten, akkor tiltva lesz. Ha valamire vonatkozik egy megengedő és egy tiltó szabály is, akkor a tiltás lesz az érvényes.
"order deny,allow" esetében fordítva, a megengedés az alapértelmezés, azaz, ha valamit nem tiltunk meg expliciten, akkor engedélyezve lesz. Ha valamire vonatkozik egy megengedő és egy tiltó szabály is, akkor a megengedés lesz az érvényes.
Ez elsőre kissé bonyolult lehet, úgyhogy nézzünk néhány példát!
Ha mindent le akarunk tiltani, akkor a "deny from all" utasítást alkalmazzuk. Ilyenkor csak tiltó utasításunk van, mindegy, hogy "order deny,allow" vagy "order allow,deny" van előtte, ugyanúgy viselkedik.
Vegyük azt a példát, hogy mi történik akkor, ha a digikabel-t engedélyezni, a telekomot pedig tiltani szeretnénk. Ekkor az alábbi utasítást adjuk ki:
allow from digikabel.hu deny from telekom.huMi történik ilyenkor azokkal, amit nem szabályozunk, mondjuk a broadband.hu tartománnyal? Attól függ, mit adtunk meg az order utasításban. "order deny,allow" esetében csak az telekom.hu tartomány lesz tiltott, minden más engedélyezve lesz, "order allow,deny" esetében csak a digikabel.hu lesz engedélyezett, minden más tiltott.
Megkavarja a dolgot, hogy - bár sokszor redundanciát jelent - az egyértelműség miatt gyakran "allow from all" és "deny from valahonnan", illetve "deny from all" és "allow from valahonnan" kombinációt kell használni. Ilyenkor különösen oda kell figyelni a sorrendre, mert ha az allow, deny szavak közül ugyanaz van az order-ben másodikként, ami a "from all"-nál is, akkor az ellentétes irányú beállítások hatástalanok
Javasolható, hogy az egyértelműség miatt a következő egyszerű kódoslási szabályt alkalmazzuk: Ha szelektíven tiltani szeretnénk, akkor az "order allow,deny" + "allow from all" + "deny from konkrettiltas" kombinációt alkalmazzuk.
order allow,deny allow from all deny from konkrettiltas
Ha szelektíven engedélyezni szeretnénk, akkor az "order deny,allow" + "deny from all" + "allow from konkretengedelyezes" kombinációt alkalmazzuk.
order deny,allow deny from all allow from konkretengedelyezes