Autor Zpráva
flux
Profil *
        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
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 *
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
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
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 *
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."')");
Takhle je insert při registraci, je dobře proveden?
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 *
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
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 *
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'];
Pujde s tim pracovat třeba na 3-4 stránkách?


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>";
        }

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: