Autor Zpráva
web2000
Profil *
Ahoj, pro přístup admina na některé stránky používám následující kód, zajímalo by mě zda ho mám dostatečně ošetřený proti nějakému šťouralovi? Díky za případnou konzultaci.

<?php
session_start();
include "database.inc";

if ($ok) //zpracování formuláře
{
$sql = "select password from admin where username = '$jmeno'";
$res = mysql_query ($sql);

if ($res && mysql_num_rows ($res) && md5 ($heslo) == mysql_result ($res,0))
{
$_SESSION ["username"] = $jmeno;
Header ("Location:$back");
exit;
}

else
$chyba = true;
}
mysql_close();
?>

<?php
if ($chyba)
echo "<p>Uživatelské jméno nebo heslo neexistuje</p>"
?>


Dále v každé stránce ke které je nutné se přihlásit mám tento kousek kódu:

<?php
session_start();
if (!$_SESSION ["username"])
{
Header ("Location:login.php?back=$PHP_SELF");
exit;
}
?>
web2000
Profil *
ještě přidám formulář, pro ty které by tento kód chtěli použít:

<form action="<?php echo $PHP_SELF ?>" method="post">
<input type="hidden" name="back" value="<?php echo $back ?>" /><br />
<input type="text" name="jmeno" /><br />
<input type="password" name="heslo" /><br />
<input type="submit" name="ok" value="Přihlásit" />
</form>
Ondřej Fejtek
Profil
Přístupové údaje k databázi bych raději dal do PHP souboru.
BetaCam
Profil
Pokud nemáš nastavenej server, aby se soubory .inc zpracovávali přes PHP tak dej souboru database príponu .php

a jinak ta podmínka

if ($res && mysql_num_rows ($res) && md5 ($heslo) == mysql_result ($res,0))

mi přijde nějaká složitá šlo by to udelat 5x jednodušeji
MiSHAK
Profil
@BetaCam Určitě ano, kontrolu hesla můžeme nechat na databázi MySQL má implementovány fce SHA1 i MD5 tj. za WHERE dodat AND `heslo` = MD5('$heslo') tj.:
$res = mysql_query("SELECT * FROM `uzivatele` WHERE `jmeno` = '$jmeno' AND `heslo` = MD5('$heslo') LIMIT 1");

LIMIT 1 je jen kvůli rychlosti (ať nevrátí více než jednoho uživatele)

Zpracovani a kontrolu vstupnich hodnot si doufám každý ošetří sám v hlavě.
Dalibor
Profil *
to MiSHAK: existuje nějaký rychlostní rozdíl v dotazu s a bez LIMIT 1, i když s naprostou jistotou vím, že v databázi není vice než jeden výsledek? Jako že třeba jakmile narazí na vyhovující záznam dál nehledá?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0