ugrás a tartalomhoz

Egy nagyon egyszerű bejelentkező rendszer

attiss94 · 2011. Okt. 27. (Cs), 21.17
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.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
						{}
			}
?>
bejelentkezes.php

<?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ó.";
				}
		}
?>
kijelentkezes.php

<?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
					{}
			}
?>
 
1

Cookie?

Poetro · 2011. Okt. 27. (Cs), 22.08
Nem értem miért akarsz saját magad sütiket létrehozni? A munkamenethez legegyszerűbb a PHP beépített session_* függvényeit használni, azok megoldják neked a sütiket is, és nem kell hackelni a sütikkel. Főleg, hogy nem tárolunk a kliens oldalán jelszót semmilyen formában. Mert valaki leül a gépéhez, és pár perc / óra alatt visszafejti a jelszavát, főleg ha csak pusztán md5-öt használsz.

Inkább olvasd el a Weblaboron található cikkeket, amik ugyan nem frissek, de ma is megállják a helyüket.
2

Mint ahogy már előttem írták,

Kubi · 2011. Okt. 27. (Cs), 22.19
Mint ahogy már előttem írták, használd a session-t erre a célra.

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).
3

Hát ez durva.Ez az egész

inf · 2011. Okt. 28. (P), 05.31
Hát ez durva.

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:

session_start();

if (jelszoRendben())
{
	session_regenerate_id();
	$_SESSION['felhasznalo']=felhasznaloAzonositoLekerese();
	$_SESSION['jogok']=jogokLekerese();
	header('Location: belepve.php');
	exit();
}
jogosultság ellenőrzés

session_start();

if (!$_SESSION['jogok']['commentelés'])
{
	nincsJogod();
	exit();
}

commentMentese();
kiléptetés:

session_start();
session_destroy();
Ezek mellett még érdemes egy másik - a felhasználóra jellemző - kódot generálni, amiket az űrlapokkal küldesz ki, és visszavársz a POST-tal. Ezzel tudod ellenőrizni, hogy nem e külső oldalról küldték az űrlapot miközben a felhasználó úgy nézte meg azt az oldalt, hogy be volt jelentkezve a tiéden. (CSRF ellen)

É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)
4

inf3rno, esetleg címszavakban

mahoo · 2011. Okt. 28. (P), 20.19
inf3rno, esetleg címszavakban fel tudnád sorolni, hogy miket tartasz még alapvető biztonsági eljárásoknak egy weboldalnál. Ilyenekre gondolok, mint például amit írtál:

- 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!!!
5

MySQL real escape helyett

inf · 2011. Okt. 28. (P), 21.29
MySQL real escape helyett használj PDO statementeket.

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...
6

Azért, így is hasznos

mahoo · 2011. Okt. 29. (Szo), 08.09
Azért, így is hasznos tanácsokat adtál, köszönöm és utánanézek.
7

Alapmű

gabesz666 · 2011. Okt. 31. (H), 20.56
Egy "alapmű" - ha lehet így fogalmazni - a témával kapcsolatban a stackoverflow egyik bejegyzése
8

Ez tényleg nagyon jó,

mahoo · 2011. Okt. 31. (H), 22.20
Ez tényleg nagyon jó, köszi!!!