Hozzáférés tiltás

Általános hozzáférés tiltás

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.

Hozzáférés tiltás IP alapján

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
Le lehet tiltani nem csak IP cím, hanem tartomány név alapján is. Az alábbi beállítás először engedélyezi mindenhonnan a hozzáférést "allow from all", majd a digikabel.hu tartományból jövő kéréseket tiltja le:

order allow,deny
allow from all
deny from digikabel.hu
A hozzáférést ellenkező módon is be lehet állítani, azaz nem letiltani, hanem csak bizonyos tartományból engedélyezni a belépéseket. Ez akkor hasznos, ha pl. csak egy belső hálózatról, vagy tartományból akarjuk megengedni a hozzáférést. Az "allow from" kifejezés után kell beírni, honnan engedélyezzük a hozzáférést. Az alábbi beállítás épp az előző kód ellenkezőjét csinálja, és csak a digikabel.hu tartományból jövő kéréseket engedélyezi:

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:

/denydirectory2/

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

Az Order utasítás

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.hu
Mi 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