Autor | Zpráva | ||
---|---|---|---|
flux Profil * |
#1 · Zasláno: 13. 9. 2015, 21:11:21
if(isset($_POST['_login'])) { con(); $result = mysql_query("SELECT nick,pass FROM uzivatele WHERE nick = '".mysql_real_escape_string($_POST['_nick'])."'"); $data = mysql_fetch_array($result); if(empty($_POST['_nick']) OR empty($_POST['_heslo'])) { echo "<div class='bg-danger kkt' align='center'>Vyplň nick a heslo</div>"; } else if(!(mysql_num_rows($result) == 1)) { echo "<div class='bg-danger kkt' align='center'>uživatel neexistuje</div>"; } else if(!($_POST['_heslo'] == $data['pass'] && $_POST['_nick'] == $data['nick'])) { echo "<div class='bg-danger kkt' align='center'>Nespravne uživatelské jméno a heslo</div>"; } else { echo "<div class='bg-danger kkt' align='center'>asdjaslkdajsldkjslkdsajdlasdlkajdlaskdjaslkdjaslkdjalskdjsakl</div>"; } } DObrý den chtěl bych se zeptat jestli jde nějak jinak porovnávat data s údaji ve formuláři. Myslím jinak než přes mysql_fetch_array... Další věc na kterou bych se chtěl zeptat jak můžu zahashovat hesla a při porovnání hesla ve formu s heslem v DB se odhashovat a porovnat jestli je heslo stejné? |
||
Taps Profil |
#2 · Zasláno: 13. 9. 2015, 21:17:25
flux:
„chtěl zeptat jak můžu zahashovat hesla a při porovnání hesla ve formu s heslem v DB se odhashovat a porovnat jestli je heslo stejné?“ Můžeš přímo porovnávat hashe, navíc md5 i sha1 jsou jednosměrné hashe a nelze je dešifrovat |
||
lionel messi Profil |
flux:
„DObrý den chtěl bych se zeptat jestli jde nějak jinak porovnávat data s údaji ve formuláři. Myslím jinak než přes mysql_fetch_array...“ Mysql_fetch_array nemá s porovnaním nič spoločné, to robí databáza pomocou klauzuly WHERE. „ Další věc na kterou bych se chtěl zeptat jak můžu zahashovat hesla“ Pomocou ľubovoľnej hashovacej funkcie. Odporúčam použiť password_hash dostupnú od PHP 5.5.0 (md5 ani sha1 nemožno považovať za bezpečné). „při porovnání hesla ve formu s heslem v DB se odhashovat a porovnat jestli je heslo stejné?“ Hash nie je šifra, je to len odtlačok, nie je z neho možné získať pôvodný reťazec. Overenie zhody realizuj podľa známeho: „Keď nepríde Mohamed k hore, príde hora k Mohamedovi.“ pomocou funkcie password_verify (ako už zmienil Taps, porovnáš hashe). V dokumentácii nájdeš príklady použitia oboch uvedených funkcií. |
||
flux Profil * |
#4 · Zasláno: 13. 9. 2015, 21:25:23
tak v tom kousku kódu porovnávám data z formu s daty v DB takhle jde to udělat i jinou cestou?
$result = mysql_query("SELECT nick,pass FROM uzivatele WHERE nick = '".mysql_real_escape_string($_POST['_nick'])."'"); $data = mysql_fetch_array($result); if(!($_POST['_heslo'] == $data['pass'] && $_POST['_nick'] == $data['nick'])) { echo "<div class='bg-danger kkt' align='center'>Nespravne uživatelské jméno a heslo</div>"; } |
||
Taps Profil |
#5 · Zasláno: 13. 9. 2015, 21:27:33
flux:
jakou metodou máš uložena hesla v databázi? |
||
lionel messi Profil |
flux:
„tak v tom kousku kódu porovnávám data z formu s daty v DB takhle jde to udělat i jinou cestou?“ Nie. Čo vlastne znamená jinou cestou? Inak riadok 2 sa v úryvku kódu zdá byť úplne zbytočný. |
||
flux Profil * |
Zatim to ukládám takhle, prostě jak uživatel vyplní v registr. formu heslo tak se to uloží do DB. teďka právě řešim to hashování..
Moderátor juriad: Opraven obrázek.
|
||
lionel messi Profil |
#8 · Zasláno: 13. 9. 2015, 21:46:00
flux:
„jak uživatel vyplní v registr. formu heslo tak se to uloží do DB. teďka právě řešim to hashování..“ Dúfam, že escapované. Odkaz ti nefunguje. |
||
flux Profil * |
#9 · Zasláno: 13. 9. 2015, 21:48:57
https://ctrlv.cz/shots/2015/09/13/65wx.png
tady, už by měl fungovat. :D $result = mysql_query("INSERT INTO uzivatele(nick,pass,email,zustatek,datumregistrace,aktivovan,ip) VALUES('".mysql_real_escape_string($_POST['_nick'])."','".mysql_real_escape_string($_POST['_pass'])."','".$_POST['_email']."','0','".time()."','0','".$_SERVER['REMOTE_ADDR']."')"); $result = mysql_query("INSERT INTO aktivacni_emaily(email,confirm) VALUES('".$_POST['_email']."','".$key."')"); |
||
lionel messi Profil |
flux:
„Takhle je insert při registraci, je dobře proveden?“ Nie, neescapuješ $_POST['_email'] (oba inserty) a vadia mi aj použité apostrofy okolo čísel v stĺpcoch zustatek a datumregistrace , hoci to MySQL prežije (prvý insert).
Pozn.: Práve z dôvodu, že na ručné ošetrenie možno ľahko zabudnúť, odporúčajú mnohí kolegovia sofistikovanejšie spôsoby práce s db, napr. dibi, kde sa o escapovanie postará knižnica automaticky. |
||
flux Profil * |
#11 · Zasláno: 13. 9. 2015, 21:55:08
Můžu se zeptat k čemu ten mysql_real_escape_sring je? Docela jsem to nepochpil :D Jeho užití, jen vim že se používá proti sql injection :D a co všechno se při užití mysql_real_escape_string musí dávat do týhle funkce?
|
||
lionel messi Profil |
#12 · Zasláno: 13. 9. 2015, 21:58:14
flux:
„Můžu se zeptat k čemu ten mysql_real_escape_sring je? Docela jsem to nepochpil :D Jeho užití, jen vim že se používá proti sql injection“ To je celá veda a jediný dôvod, prečo sa escapovanie používa. Skutočná sila SQL Injection nespočíva vo vyvolaní chyby, ale v tom, že útočník môže získať plnú moc nad údajmi uloženými v databáze. „a co všechno se při užití mysql_real_escape_string musí dávat do týhle funkce?“ Akýkoľvek užívateľský vstup, ktorý sa v db používa ako text. U čísel je vhodnejšie pretypovanie na číslo, napr. pomocou intval. |
||
flux Profil * |
#13 · Zasláno: 13. 9. 2015, 22:10:05 · Upravil/a: flux
Takže když bude login form, tak taky používat mysql_real_escape_string?
Každopádně co jsem se chtěl ještě zeptat. Po přihlášení potřebuju aby se uživateli nastavil session. Nějak takhle jsem to udělal, chtěl bych se zeptat, je to udělané správně? session_start(); $_SESSION['user_id'] = $data['user_id']; $_SESSION['user_name'] = $data['nick']; $_SESSION['zustatek'] = $data['zustatek']; Ještě jedna věc, chtěl bych se zeptat proč po reloadnutí stránku se mi z https://ctrlv.cz/rEqp tyhle hodnoty vynulují? všechno tučný je z db.. if(isset($_SESSION['user_id'])) { $result = mysql_query("SELECT zustatek,nick,datumregistrace,ip FROM uzivatele WHERE user_id = '".mysql_real_escape_string($_SESSION['user_id'])."'"); $data = mysql_fetch_array($result); echo "<div class='bg-danger kkt' align='center'>Vítej, <b>".$data['nick']."</b>"; echo "<BR>Zůstatek:<b>".number_format($data['zustatek'])."$</b>"; echo "<BR>Tvá IP adresa:<b>".$data['ip']."</b>"; echo "<BR>Datum registrace:<b>".date_format($data['datumregistrace'],'U = Y-m-d H:i:s')."</b>"; echo "<BR><a href='?logout'>Odhlásit</a>"; echo "</div>"; } |
||
Časová prodleva: 9 let
|
0