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 :)
Az egyik posztban olvastam már erről.
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:)