Autor | Zpráva | ||
---|---|---|---|
Folker Profil |
#1 · Zasláno: 21. 10. 2009, 20:04:38
Ahoj, řekněme že mám asociativní pole o několika řádcích, kde klíče jsou něčí jména a hodnoty hesla vytažené z databáze. Přes přihlašovací formulář někdo zadá své jméno a heslo a já potřebuji zadané údaje porovnat s hodnotami v poli tak, aby true bylo pouze v případě, že souhlasí klíč s loginem a zároveň hodnota s heslem přihlašovatele ze stejného řádku pole. Nesmí být použit login z třeba 2. řádku pole a hodnota z 5. řádku pole. Jakou funkci pro procházení pole mám použít?
Prosím poraďte. |
||
MCKAY Profil |
#2 · Zasláno: 21. 10. 2009, 20:18:22
Folker:
Myslím, že na procházení pole se používá cyklus foreach. Nevidím v tom, co jsi řekl žádný problém, pokud to chápu dobře, že ti jde jen o kontrolu, jestli souhlasí login. |
||
Alphard Profil |
#3 · Zasláno: 21. 10. 2009, 20:21:40
Folker:
Nevidím důvod dělat to takhle. V databázovém dotazu přidejte where jmeno = 'xxx' and heslo = 'xxx' a je to. |
||
Folker Profil |
#4 · Zasláno: 21. 10. 2009, 20:37:09
Zeptám se možná blbě, ale za 'xxx' mám dosadit proměnou, která přijímá údaj z formuláře?
|
||
Alphard Profil |
#5 · Zasláno: 21. 10. 2009, 20:52:51
[#4]
Ano, ale měl by být ošetřený proti sql injection. // ošetříme vstupní údaje od uživatele // funkce trim() má význam hlavně u hesla, ořeže bílé znaky (např. mezery) na začátku a konci řetězce $username = gpc_addslashes(trim($_POST['username'])); $password = gpc_addslashes(trim($_POST['password'])); // zjistíme, jestli je v databázi daný uživatel a jestli se prokazuje platným heslem // více o ukládání hesel, např. o tzv. solení, najdete na http://php.vrana.cz/ukladani-hesel.php $result = mysql_query("SELECT COUNT(*) FROM users WHERE username = '$username' AND password = sha1('$password')"); if (mysql_result($result, 0)) // předpokládáme, že dotaz proběhl úspěšně, pokud ne, bude stejně vráceno false // true (a splnění podmínky) nastane pouze tehdy, když v databázi existuje správná kombinace uživatelského jména a hesla Tohle jsem vzal z FAQ. Najdete tam i definici funkce gpc_addslashes() a její zdůvodnění. |
||
Folker Profil |
#6 · Zasláno: 21. 10. 2009, 21:18:42
Díky, už to chápu, ale asi jsem něco zvoral. Napsalo mi to
Fatal error: Call to undefined function: gpc_addslashes() in C:\Program Files\VertrigoServ\www\administrace2\uvod.php on line 6 Nevíš prosím čím to je? |
||
AM_ Profil |
#7 · Zasláno: 21. 10. 2009, 21:38:35
to je tím, že ta funkce v PHP neexistuje (stačí si přeložit hlášku:) ) řešení je napsat si ji, já bych jí řešil nějak takto:
function gpc_addslashes($str){ return get_magic_quotes_gpc() ? $str : addslashes($str); } |
||
Alphard Profil |
#8 · Zasláno: 21. 10. 2009, 21:41:11
Jak píše AM_. Ta funkce ale je na odkazované stránce, sem jsem ji zbytečně nekopíroval.
|
||
Folker Profil |
#9 · Zasláno: 21. 10. 2009, 21:48:37
O.k. Díky moc, jste super!!!
|
||
Folker Profil |
#10 · Zasláno: 21. 10. 2009, 21:53:32
PS: Ještě jeden dotaz! Když tam ta funkce není, jaké je riziko ?
|
||
Alphard Profil |
#11 · Zasláno: 21. 10. 2009, 21:58:38
V tomto případě docela velké. Je to natolik profláklá zranitelnost (tzv. sql injection), že se vám potom do admistrace (za "vhodných" podmínek) dostane každý, kdo se trochu zajímá o PHP.
|
||
Folker Profil |
#12 · Zasláno: 21. 10. 2009, 22:10:21
AHA! Tak to je nářez, díky moc.
|
||
Časová prodleva: 14 let
|
0