Egy nagyon egyszerű bejelentkező rendszer
Sziasztok!
Az előbb írtam egy bejelentkező programot, ami egyenlőre nagyon egyszerű, csak később fogom bővíteni, de alapjaiban is eléggé recseg. Az első bejelentkezésnél elmenti a sütit, de nem szeretné törölni onnan, akármit csinálok. A jó bejelentkező programnak tartlmazni a kéne egy SESSION-t is, simán COOKIE nem elég?
index.phpbejelentkezes.phpkijelentkezes.php
■ Az előbb írtam egy bejelentkező programot, ami egyenlőre nagyon egyszerű, csak később fogom bővíteni, de alapjaiban is eléggé recseg. Az első bejelentkezésnél elmenti a sütit, de nem szeretné törölni onnan, akármit csinálok. A jó bejelentkező programnak tartlmazni a kéne egy SESSION-t is, simán COOKIE nem elég?
index.php
<?php
$jelszo = md5("jelszo");
if ($_COOKIE['Adminisztracio'] == "")
{
?>
<form method="POST" action="bejelentkezes.php">
<input type="password" name="jelszo" size="15" /><br />
<input type="submit" value="Bejelentkezés" />
</form>
<?php
}
else
{
if ($_COOKIE['Adminisztracio'] == $jelszo)
{
echo "Be vagy jelentkezve.<br />";
echo "Sütid md5 kódja: " . $_COOKIE['Adminisztracio'] . "<br />";
echo "Jelszavad md5 kódja: " . $jelszo;
}
else
{}
}
?>
<?php
$jelszo = md5("jelszo");
$jelszo_beirt = md5($_POST['jelszo']);
if ($jelszo == $jelszo_beirt)
{
setcookie("Adminisztracio", $jelszo, time()+3600);
echo "Sikeres bejelentkezés!";
}
else
{
if ($_POST['jelszo'] == "")
{}
else
{
echo "Hibás jelszó.";
}
}
?>
<?php
$jelszo = md5("jelszo");
if ($_COOKIE['Adminisztracio'] == "")
{
echo "Nem is voltál bejelentkezve.";
}
else
{
if ($_COOKIE['Adminisztracio'] == $jelszo)
{
setcookie("Adminisztracio", $jelszo, time()-3600);
echo "Sikeresen kijelenkeztél!";
}
else
{}
}
?>
Cookie?
Inkább olvasd el a Weblaboron található cikkeket, amik ugyan nem frissek, de ma is megállják a helyüket.
Mint ahogy már előttem írták,
Rögtön szemet szúrt ez a sor:
setcookie("Adminisztracio", $jelszo, time()+3600);
Ilyet ne csinálj, soha, semmilyen fontos információt ne tárolj cookie-ban (még ha az md5-el van "titkosítva", mondjuk inkább randomizálva), azt szinte bárki kiolvashatja onnan és felhasználhatja.
Ha az infókat session-be teszed, azt senki nem fogja elérni rajtad kívül (a szerveren kívül).
Hát ez durva.Ez az egész
Ez az egész munkamenet kérdés két dologról szól:
- A szerver a belépés után megjegyezze, hogy ki vagy.
- Más ne tudja hamisítani az identitásodat.
Az első azért fontos, hogy ne kelljen minden egyes commentnél beírnod a jelszavadat.
A másodikat talán nem kell magyarázni, hogy miért fontos. Ott inkább azt kell elmagyarázni, hogy milyen elven akadályozzuk meg az identitás hamisítását. Ennél az a lényeg, hogy generálunk egy véletlen karaktersorozatot, amit session id-nek nevezünk. A session id annyira hosszú, hogy évekig lehetne próbálgatni, mire ráhibázna az ember, ezért találgatással nem lehet meghamisítani, muszáj tudni ahhoz, hogy a szerver elhiggye, hogy te vagy az. Erre való a cookie. A session id a session cookie-ban tárolódik, és amikor a szerver beolvassa, akkor kikeresi a hozzá tartozó fájlt, és betölti belőle a jogosultságaidat. Így lehet garantálni, hogy a megfelelő emberhez a megfelelő jogok tartozzanak.
A session id ellopására van egy jó csomó technika, amiket most nincs kedvem leírni, nézz utánuk.
A nagyon egyszerű rendszer:
beléptetés:
Érdemes még megnézni a session_set_cookie_params függvényt, mert ebben lehet beállítani, hogy httponly legyen a session cookie, szóval hogy ne lehessen javascripttel lekérni az értékét. (XSS-es cookie lopás ellen)
inf3rno, esetleg címszavakban
- formhoz kódot generálni CSRF ellen
- session_set_cookie_params beállítás XSS-es cookie lopás ellen
(- mysql_real_escape_string SQL injection ellen)
Utánaolvasnék én majd, ezért elég lenne felsorolás szinten.
Nagyon köszönöm!!!
MySQL real escape helyett
Ezeken kívül nem nagyon van más... Ilyen alapvető dolgok, hogy 3x hibás jelszó után captchat teszel ki, meg saltolod meg hasheled a jelszót, nem csak simán letitkosítod, a bejövő dolgokból meg szűröd a javascriptet, meg az SQL-t, a regisztrációnál a jelszó megadásnál kiteszel egy erősség mérőt, esetleg kötelezed a felhasználót, hogy erősebb jelszót állítson be, a szerveren kikapcsolod a TRACE-t, mert ha jól tudom azzal is lehet sessiont lopni, stb... Van néhány apróság, amire érdemes odafigyelni, meg aminek érdemes utánaolvasni. Szerintem ha rákeresel a session steal-re, akkor kidob ezer találatot, menj rá az egyikre, olvasgass, úgyis megjelenik benne egy olyan kifejezés, amire megint rá tudsz keresni, és így tovább... Én sem hiszem, hogy minden ilyen támadási módszert ismernék, de azért igyekszem...
Azért, így is hasznos
Alapmű
Ez tényleg nagyon jó,