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éter Mit állít be
host A 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
User A 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
Pass A 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
Name A 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
Message Azt 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_name Az adminisztrációs felület eléréséhez szükséges felhasználónév
Adm_pass Az adminisztrációs felület eléréséhez szükséges jelszó
Docs Annak 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 :) )
Realm Azt 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év Mi az
index.html vagy index.php A 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.html Ez 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.html Ez 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éter Mit állít be
host A 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
User A 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
Pass A 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
Name A 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
Message Azt 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_name Az adminisztrációs felület eléréséhez szükséges felhasználónév
Adm_pass Az adminisztrációs felület eléréséhez szükséges jelszó
Docs Annak 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 :) )
Realm Azt 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év Mi az
index.html vagy index.php A 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.html Ez 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.html Ez 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 :)

2 HOZZÁSZÓLÁS

  1. 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:)

HOZZÁSZÓLOK A CIKKHEZ

Kérjük, írja be véleményét!
írja be ide nevét