Autor | Zpráva | ||
---|---|---|---|
web2000 Profil * |
#1 · Zasláno: 29. 7. 2007, 10:50:31
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 * |
#2 · Zasláno: 29. 7. 2007, 10:51:50
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 |
#3 · Zasláno: 29. 7. 2007, 12:24:55
Přístupové údaje k databázi bych raději dal do PHP souboru.
|
||
BetaCam Profil |
#4 · Zasláno: 29. 7. 2007, 14:26:24
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 |
#5 · Zasláno: 29. 7. 2007, 19:12:41
@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 * |
#6 · Zasláno: 29. 7. 2007, 19:26:26
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á?
|
||
Časová prodleva: 17 let
|
0