HTTP autentikáció PHP-val


A fórum SEGÍTSÉG topicjában merült fel a kérdés, hogy hogyan lehetne egyszerűen – minimális php ismerettel – jelszóval védeni egy oldalt.
Zsola barátunk egy jóval ezelőtti hozzászólásában írt egy módszerről, amivel a “htaccess-es” védelmet (ez a basic HTTP autentikáció) lehet egyszerűen emulálni PHP-val.

Egy kicsit továbbgondolva, továbbfejlesztve, immár admin felülettel letölthető egy teljesen kész megoldás.

A szkript 3 különböző fileból áll, egy “közös” konfigurációs file, egy adminisztrációs felület, és maga az azonosító kód.

Annak ellenére, hogy a felhasználóneveket és jelszavakat MySQL adatbázisból szedi ki, nincs hozzá SQL file csatolva, mivel a megfelelő táblát az admin felület automatikusan létrehozza, amennyiben az nem létezik. A szkript működésre bírásához össz-vissz egy könyvtárat kell létrehoznunk, és módosítanunk a konfigurációs fájlt (“tha_config.php”).

Utóbbihoz egy kis segítség:

ParaméterMit állít be
hostA MySQL szever neve

Ez fizetős tárhelyen, és sajátgépeken általában localhost

FreeWeb-en sql

Ultraweb-en sql1.ultrweb.hu és sql5.ultraweb.hu között változik

A többi Free tárhelyról nem tudok mit írni, valahol biztos fel van tüntetve az admin felületen
UserA MySQL-hez tartozó felhasználóneved

Fizetős szerveren a rendszergazda adja meg (ha nem adta kérd el tőle! :) )

Free helyen általában ugyanaz, mint a regisztráláskor használt felhasználónév
PassA MySQL adatbázis eléréseh szükséges jelszavad

Ezt is elkérheted a Rendszergazdától, vagy ingyenes helyeken az adminisztrációs felületen megnézheted
NameA MySQL adatbázis neve

Fizetős szerveren a rendszergazda adja meg

Free helyen általában ugyanaz, mint a regisztráláskor használt felhasználónév
MessageAzt az üzenetet adhatod meg vele, amit akkor kell kiírni, ha nincs felhasználóneve / jelszava, és nem található a hibalap (erről később)
Adm_nameAz adminisztrációs felület eléréséhez szükséges felhasználónév
Adm_passAz adminisztrációs felület eléréséhez szükséges jelszó
DocsAnnak a könyvtárnak a neve, amiben a védeni kívánt fájlokat tárolod. (És remélhetőleg pár sorral fentebb hoztál létre :) )
RealmAzt a szöveget adja meg, ami megjelenik a felhasználó és jelszót kérő ablakon.

Ha minden igaz, és eljutottál idáig, akkor valószínűleg már van egy – remélhetőleg jól – beállított konfigurációs fájlod és egy könyvtárad. Ebbe a könyvtárba jöhetnek azok a fájlok, amiket le akarsz védeni.

Van 3 kiemelt fájlnév, amelyet NAGYON ajánlott létrehozni:

FájlnévMi az
index.html vagy index.phpA védett felület nyitólapja. Ez jön be, ha a linkben nincs megadva, hogy melyik fájlt szeretné a felhasználó megtekinteni.
404.htmlEz a file jelenik meg, ha a lekért oldal nem található és nincs index oldalad (ha van index oldal, és nem található egy lekért oldal, akkor az index jelenik meg). A neve az erre a problémára vonatkozó HTTP hibaszámból jön (404 – Not Found). Ha nem létezik a 404.html, akkor egy “A keresett file nem található, ráadásul a nyitó oldalt se találtam!” hibaüzenet jelenik meg
503.htmlEz a file jelenik meg, ha nem sikerült az azonosítás. Ha nem létezik, akkor a konfiguráció fájlban megadott hibaüzenet jelenik meg.

Amennyiben védett tartalomra akarsz linket elhelyezni, a következőképp járj el:

1.Ne magára a fájlra hivatkozz, hanem a secure.php-re (vagy amire átnevezted, mert ezt nyugodtan megteheted :) – Ez legyen igaz a védett képekre és egyéb kiegészítő dolgokra, különben a védelem megszűnik, ha egy picit is okos ember próbálja hackelni a rendszert…

2.A linkbe tegyél bele egy page változót, aminek az értéke a kért fájlnév legyen. Pl.: page=valami.html az index.html-t fogja lekérni. Ha nem adod meg a page változót, akkor az index.html vagy index.php lesz behívva.

Kiegészítés: A filenév UNIX rendszereken case-sensitive (kis- és nagybetűérzékeny), így ajánlott erre is figyelni)
A fentiek alapján egy linknek így kell valahogy kinéznie:

secure.php?page=fileneve.filekiterjesztése
Ha elkészültünk oldalainkkal, az összes linkelés ellenőriztük, beállítottunk mindent a konfigurációs file-ban, töltsük a fileokat és a könyvtárat a szerverre, és böngészőnkkel nyissuk meg az admin.php-t. Vigyünk fel egy felhasználót, és próbáljuk ki új azonosító rendszerünket :)

Frissítés
Felmerült a kérdés, hogy lehetne-e valahogy engedélyezni oldalunk látogatóinak, hogy regisztrálják magukat a lezárt rész eléréséhez. Igen, lehet… :)
Ennek megvalósítására újabb szkript készült, amit az eredeti csomagba biztonsági szempontokat figyelembe véve nem tettem be, mivel egy véletlenül szerveren felejtett regisztráló fájlal egyszerűen lehetne nézni a lezárt tartalmat. A kiegészítő csomag innen tölthető le.
Ezt a fájlt egyszerűen töltsük fel a másik három azonosító php fájlunk mellé (tha_config, secure.php, admin.php) és a “nyitott” oldalunkra helyezzük el a következő kódot oda, ahol engedélyezni szeretnénk a regisztrálást:

1
2
3
4
5
6
7
<form action="reg.php" method="post">
Felhasználónév: <input type="text" name="username" />
<br />
Jelszó: <input type="password" name="password" />
<br />
<input type="submit" value="Regisztráció" />
</form>

(Természetesen saját módszerrel is eljuttathatjuk az adatokat a reg.php fájlhoz, a lényeg, hogy POST-oljuk őket, és a két adat neve username és password legyen)
Ezután a tha_config.php fájlban megadott $docs könyvtárba rakjunk be két fájlt: reg_ok.html és reg_fail.html. Előbbi akkor jelenik meg, ha a regisztráció sikeres, utóbbi akkor, ha nem.

A reg_fail.html fájlba érdemes beleírni, hogy milyen okok miatt lehet sikertelen a regisztráció:

1.A felhasználónév és/vagy jelszó nincs megadva, vagy üres

2.A megadott felhasználónév már létezik az adatbázisban
Tipp: A reg_ok.html fájlban érdemes elhelyezni egy

1
<a href="secure.php">Belépés</a>

szöveget, mert így a felhasználók könnyebben tájékozódhatnak az oldalon.
Remélem minden világos, amennyiben bármilyen kérdés van, a bevezetőben említett fórumtémában nyugodtan kérdezhettek :)
Egy kicsit továbbgondolva, továbbfejlesztve, immár admin felülettel letölthető egy teljesen kész megoldás.

A szkript 3 különböző fileból áll, egy “közös” konfigurációs file, egy adminisztrációs felület, és maga az azonosító kód.

Annak ellenére, hogy a felhasználóneveket és jelszavakat MySQL adatbázisból szedi ki, nincs hozzá SQL file csatolva, mivel a megfelelő táblát az admin felület automatikusan létrehozza, amennyiben az nem létezik. A szkript működésre bírásához össz-vissz egy könyvtárat kell létrehoznunk, és módosítanunk a konfigurációs fájlt (“tha_config.php”).

Utóbbihoz egy kis segítség:

ParaméterMit állít be
hostA MySQL szever neve

Ez fizetős tárhelyen, és sajátgépeken általában localhost

FreeWeb-en sql

Ultraweb-en sql1.ultrweb.hu és sql5.ultraweb.hu között változik

A többi Free tárhelyról nem tudok mit írni, valahol biztos fel van tüntetve az admin felületen
UserA MySQL-hez tartozó felhasználóneved

Fizetős szerveren a rendszergazda adja meg (ha nem adta kérd el tőle! :) )

Free helyen általában ugyanaz, mint a regisztráláskor használt felhasználónév
PassA MySQL adatbázis eléréseh szükséges jelszavad

Ezt is elkérheted a Rendszergazdától, vagy ingyenes helyeken az adminisztrációs felületen megnézheted
NameA MySQL adatbázis neve

Fizetős szerveren a rendszergazda adja meg

Free helyen általában ugyanaz, mint a regisztráláskor használt felhasználónév
MessageAzt az üzenetet adhatod meg vele, amit akkor kell kiírni, ha nincs felhasználóneve / jelszava, és nem található a hibalap (erről később)
Adm_nameAz adminisztrációs felület eléréséhez szükséges felhasználónév
Adm_passAz adminisztrációs felület eléréséhez szükséges jelszó
DocsAnnak a könyvtárnak a neve, amiben a védeni kívánt fájlokat tárolod. (És remélhetőleg pár sorral fentebb hoztál létre :) )
RealmAzt a szöveget adja meg, ami megjelenik a felhasználó és jelszót kérő ablakon.

Ha minden igaz, és eljutottál idáig, akkor valószínűleg már van egy – remélhetőleg jól – beállított konfigurációs fájlod és egy könyvtárad. Ebbe a könyvtárba jöhetnek azok a fájlok, amiket le akarsz védeni.

Van 3 kiemelt fájlnév, amelyet NAGYON ajánlott létrehozni:

FájlnévMi az
index.html vagy index.phpA védett felület nyitólapja. Ez jön be, ha a linkben nincs megadva, hogy melyik fájlt szeretné a felhasználó megtekinteni.
404.htmlEz a file jelenik meg, ha a lekért oldal nem található és nincs index oldalad (ha van index oldal, és nem található egy lekért oldal, akkor az index jelenik meg). A neve az erre a problémára vonatkozó HTTP hibaszámból jön (404 – Not Found). Ha nem létezik a 404.html, akkor egy “A keresett file nem található, ráadásul a nyitó oldalt se találtam!” hibaüzenet jelenik meg
503.htmlEz a file jelenik meg, ha nem sikerült az azonosítás. Ha nem létezik, akkor a konfiguráció fájlban megadott hibaüzenet jelenik meg.

Amennyiben védett tartalomra akarsz linket elhelyezni, a következőképp járj el:

1.Ne magára a fájlra hivatkozz, hanem a secure.php-re (vagy amire átnevezted, mert ezt nyugodtan megteheted :) – Ez legyen igaz a védett képekre és egyéb kiegészítő dolgokra, különben a védelem megszűnik, ha egy picit is okos ember próbálja hackelni a rendszert…

2.A linkbe tegyél bele egy page változót, aminek az értéke a kért fájlnév legyen. Pl.: page=valami.html az index.html-t fogja lekérni. Ha nem adod meg a page változót, akkor az index.html vagy index.php lesz behívva.

=Kiegészítés: A filenév UNIX rendszereken case-sensitive (kis- és nagybetűérzékeny), így ajánlott erre is figyelni)

A fentiek alapján egy linknek így kell valahogy kinéznie:

secure.php?page=fileneve.filekiterjesztése

Ha elkészültünk oldalainkkal, az összes linkelés ellenőriztük, beállítottunk mindent a konfigurációs file-ban, töltsük a fileokat és a könyvtárat a szerverre, és böngészőnkkel nyissuk meg az admin.php-t. Vigyünk fel egy felhasználót, és próbáljuk ki új azonosító rendszerünket :)


Frissítés

Felmerült a kérdés, hogy lehetne-e valahogy engedélyezni oldalunk látogatóinak, hogy regisztrálják magukat a lezárt rész eléréséhez. Igen, lehet… :)

Ennek megvalósítására újabb szkript készült, amit az eredeti csomagba biztonsági szempontokat figyelembe véve nem tettem be, mivel egy véletlenül szerveren felejtett regisztráló fájlal egyszerűen lehetne nézni a lezárt tartalmat. A kiegészítő csomag innen tölthető le.

Ezt a fájlt egyszerűen töltsük fel a másik három azonosító php fájlunk mellé (tha_config, secure.php, admin.php) és a “nyitott” oldalunkra helyezzük el a következő kódot oda, ahol engedélyezni szeretnénk a regisztrálást:

<form action="reg.php" method="post">
Felhasználónév: <input type="text" name="username" />
<br />
Jelszó: <input type="password" name="password" />
<br />
<input type="submit" value="Regisztráció" />
</form>

(Természetesen saját módszerrel is eljuttathatjuk az adatokat a reg.php fájlhoz, a lényeg, hogy POST-oljuk őket, és a két adat neve username és password legyen)

Ezután a tha_config.php fájlban megadott $docs könyvtárba rakjunk be két fájlt: reg_ok.html és reg_fail.html. Előbbi akkor jelenik meg, ha a regisztráció sikeres, utóbbi akkor, ha nem.

A reg_fail.html fájlba érdemes beleírni, hogy milyen okok miatt lehet sikertelen a regisztráció:

1.A felhasználónév és/vagy jelszó nincs megadva, vagy üres

2.A megadott felhasználónév már létezik az adatbázisban

Tipp: A reg_ok.html fájlban érdemes elhelyezni egy

<a href="secure.php">Belépés</a>

szöveget, mert így a felhasználók könnyebben tájékozódhatnak az oldalon.

Remélem minden világos, amennyiben bármilyen kérdés van, a bevezetőben említett fórumtémában nyugodtan kérdezhettek :)

Kapcsolódó bejegyzések:
  • Íme egy nagyon egyszerű szkript oldalaink jelszavas védelmére. Ha például az index.html oldalunkat akarjuk védetté tenni, akkor hozzunk létre egy index.php fálj …

  • Na ez egy elég komoly tutorial, php és MySQL kell az elkészítéséhez! Első lépésként csináljunk egy MySQL táblát!CREATE TABLE `shoutbox` ( `id` INT(1 …

  • Honlapok tesztelési fázisánál, zárt tartalomnál, és még rengeteg esetben lehet hasznos, ha IP-cím alapján ki tudjuk szürni az illetéktelen látogatókat. Ezt egy …

  • Ez egy hírküldő script. Működése nagyon egyszerű. Mindössze 3 fájlból áll, és adatbázis alapú a hírek tárolása. A dbconnect.php segítségével kapcsolódik az adat …

  • Felmerült egy kérdésként, hogy lehetne egy login oldal tartalmánál (belépési név és jelszót kell megadni) jelezni a felhasználók számára azt, hogy melyik mező mi …

A cikket beküldte: BlackY ()

2 hozzászólás

  1. Detret Jusztina says:

    Az egyik posztban olvastam már erről.

  2. Sifu says:

    Sziasztok, most ismerkedem a php-val és a hírlevelet szeretném megtanulni.
    Letudná nekem egy programozó írni, a hírlevél kódját és eltudná nekem magyarázni, hogy mit miért, hogy megtudjam érteni?
    A levél küldés az megy php-val, az nem nehéz. Ennyi alap ismeretem az azért van. köszönöm:)

Szólj hozzá
a HTTP autentikáció PHP-val c. bejegyzéshez

- Engedélyezett HTML elemek: <a> <em> <strong> <ul> <ol> <li>
- Forráskód beküldéséhez tedd a kódot ezek közé: <pre lang="php" line="1">Kódrészlet helye itt</pre>