» Poradna » Programy

PHP login md5

 |   |  Microsoft Windows 10 Chrome 63.0.3239.132  |  [195.113.165.---]

Zdravím, pro maturitní projekt potřebuji napsat skript pro přihlášení z databáze, mám registraci zebežpečenou pomocí hashovací funkce md5, ale login mi nějak nefunguje, mohl by někdoprosím poradit?/** registrace **/ if(isset($_POST["odeslat"])){ $Jmeno = $_POST["jmeno"]; $Prijmeni = $_POST["prijmeni"]; $Nick = $_POST["nick"]; $Heslo = password_hash($_POST["heslo"], PASSWORD_DEFAULT); $Email = $_POST["email"]; $Opravneni = $_POST["opravneni"]; $Telefon = $_POST["telefon"]; $Mesto = $_POST["mesto"]; $Ulice = $_POST["ulice"]; $Datum = $_POST["datum"]; $Psc = $_POST["psc"]; $pripojeni=new mysqli("localhost","root","","web"); $pripojeni->set_charset("utf8"); $dotaz=$pripojeni->prepare("INSERT INTO uzivatel (`Opravneni`, `Datum`, `Jmeno`, `Prijmeni`, `Nick`, `Email`, `Heslo`, `Telefon`, `Mesto`, `psc`, `Ulice`) VALUES(?,?,?,?,?,?,?,?,?,?,?)"); $dotaz-> bind_param("issssssssss",$Opravneni,$Datum,$Jmeno,$Prijmeni,$Nick,$Email,$Heslo,$Telefon,$Mesto,$Psc,$Ulice); $dotaz->execute(); } ?><form class="" action=<?php echo $_SERVER["PHP_SELF"]; ?> method="POST"> Jméno:<input type="text" name="jmeno"> Příjmení:<input type="text" name="prijmeni"> Login:<input type="text" name="nick"> Heslo:<input type="password" name="heslo"> Email:<input type="text" name="email"> Datum:<input type="date" name="datum"> Pořadatel:<input type="radio" name="opravneni" value="2"> Běžný uživatel:<input type="radio" name="opravneni" value="1"> Telefon:<input type="text" name="telefon"> Mesto:<input type="text" name="mesto"> Ulice:<input type="text" name="ulice"> PSC:<input type="text" name="psc"> <input type="submit" name="odeslat" value="odeslat"></form>/** login **/<?php session_start();?><html><body><form method="post"> <input type="text" name="login" value=""> <input type="password" name="heslo" value=""> <input type="submit" name="log" value="log"> <input type="submit" name="logout" value="logout"></form> </body> </html> <?php$pripojeni = mysqli_connect("localhost","root","","web");if(!empty($_POST["log"])) { $heslo=$_POST["heslo"]; $result = mysqli_query($pripojeni,"SELECT * FROM uzivatel WHERE Nick='" . $_POST["login"] . "'"); $row = mysqli_fetch_array($result);{ if(is_array($row)) { if(password_verify($heslo, $row["Heslo"])){ $_SESSION["user"] = $row['Opravneni']; } var_dump(password_verify($heslo, $row["Heslo"])); var_dump($_SESSION); }}}if(isset($_POST["logout"])){ $_SESSION['user'] = "Guest"; session_regenerate_id(true);}

Odpovědi na otázku

 | Microsoft Windows 10 Firefox 57.0

To máš za 5.Dnes se hashuje heslo takto:http://php.net/manual/en/function.passwo...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 57.0

Aha, dyť to tam máš, tak jaképak md5?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 63.0.3239.132  |  [195.113.165.---]

Z nějakého důvodu se ale vůbec nevytvoří Session

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 63.0.3239.132  |  [95.103.216.---]

session_start() by sa malo na stranke spustat ako prve, skor ako nejaky GET alebo POST. Skus <?php session_start() ?> dat uplne navrch a potom sa pozri ci sa ti session vytvorila....

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Unknown Firefox 57.0  |  [37.48.52.---]

Password verify z nějakého důvodu vrací false

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 57.0

A ty se tomu divíš? Stačí se podívat, co v té funkci máš

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 57.0

Jáj zase jsem se špatně díval

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Linux Firefox 57.0

Ono by docela pomohlo, kdyby to tazatel zveřejnil odkazem přes pastebin, takhle se ten kód čte dost špatně :)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 57.0

No ta já s tím kodem mám dva problémy:a) od pohledu se mi zdá doclea blbě poskládanýb) chtělo by to i sql pro vytvoření tabulky v databázi ať to člověk může i jednoduše testnout... a jak jsi psala, pastebin by bodlo

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Unknown Firefox 57.0  |  [195.113.165.---]

Ale row heslo tu hash vytahne

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 57.0

Používám pdo, ne mysqli.Takže si jen tipnu, nepíše se tu jako čtvrtý parametr databáze?$pripojeni=new mysqli("localhost","root","","web");

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 57.0

jo aha, zase jsme se špatně díval

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 57.0

Tak třeba je to tímto:"Warning: session_start(): Cannot start session when headers already sent"

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 57.0

Neee, něco jsem provedl a další hláška, mažu to

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Unknown Firefox 57.0  |  [37.48.52.---]

Web je název databáze

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 63.0.3239.132

Je piatok, takze sice nepomozem, ale aspon si rypnem ;)). Z bezpecnostneho hladiska katastrofa ;))):- pouzivanie root na pripojenie do DB- root do DB nema heslo- meno a heslo do DB je sucast zdrojaku- pouzitie MD5 ako hashovacej funkcie- pri pouziti hasovacej funcie chyba salt- chyba akakolvek kontrola vstupu- ukazkovy kod pre uspesne SQL injection (nepouzivanie prepared statements...)- ... ;)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 57.0

To heslo tam má asi smazané schválně a i kdyby ne, určitě to zkouší na localhostu a tam je to jedno, teoreticky má přístup zvenku třeba zakázany v apache nebo ve firewallu.Nepoužívá md5, ale používá správně to, co používat má (i se solí).Prepared začal používat na začátku Kontrolu vztupu tam nemá, no, nemá tam ani ověření jestli je už uživatel v databázi.Jako já bych to udělal taky úplně jinak... Na netu je hromada příkladů, stačí nějaký napodobit...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Unknown AppleMAC-Safari 5.0  |  [90.181.48.---]

PHP bylo odjakziva charakteristicke rychlym pokrokem zacatecnika od nuly k relativne funkcnimu kodu za cenu spatnych navyku, takze se neni moc co divit :(

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Unknown Firefox 57.0  |  [37.48.52.---]

Lolofon heslo tam nemam, protože je to jenom maturitní projekt na localhostu a nikdy to ani nebude verejne publikovane a hash solit nemusim, protože to ta funkce osolí automaticky, konec konců i samotné to hashování tam dělám navíc, páč sme se to ani neučili a vzhledem k tomu, že to nebude online a ani tak by se tam nezpracovavala důležitá data, tak md5 bohatě stačí. Potřebuji pouze zprovoznit autentizaci u loginu

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 57.0

A co když si povolíš v php hlášky?A co když přesuneš <?php session_start();?>úplně na začátek?Mně to pak píše:bool(true) array(1) { ["user"]=> string(5) "admin" } což je dobře, protože jsem místo oprávnění dal jméno a bol to má true

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 57.0

"Warning: session_start(): Cannot start session when headers already sent"session_start totiž nemůže být za něčím, co poslalo nějaký výstup do prohlížeče, tedy před tím, než se pošle hlavička

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Unknown Firefox 57.0  |  [37.48.52.---]

Vsak session start mam na samem zacatku skriptu ta registrace je jiny soubor.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 57.0

Já to mám v jednom a normálně mi to funguje

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 63.0.3239.132  |  [213.192.12.---]

A můžete to sem prosím postnout? Protože i když to mám dohromady se startem na začátku, tak to pořád plive false

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 57.0

Jasně, měl jsem tu v mysql na testování db login a tabulku users a v ní id, username a password, takže jsem trošku osekal ten tvůj skript a upravil na tu tabulku:<?php session_start();if(isset($_POST["submit"])){$Jmeno = $_POST["username"];$Heslo = password_hash($_POST["password"], PASSWORD_DEFAULT);$pripojeni=new mysqli("localhost","root","heslo","login");$pripojeni->set_charset("utf8");$dotaz=$pripojeni->prepare("INSERT INTO users (`username`, `password`) VALUES(?,?)");$dotaz-> bind_param("ss",$Jmeno,$Heslo);$dotaz->execute();}?><form class="" action=<?php echo $_SERVER["PHP_SELF"]; ?> method="POST"> Jméno:<input type="text" name="username"> Heslo:<input type="password" name="password"> <input type="submit" name="submit" value="submit"></form><html> <body> <form method="post"> <input type="text" name="username" value=""> <input type="password" name="password" value=""> <input type="submit" name="log" value="log"> <input type="submit" name="logout" value="logout"> </form> </body></html><?php$pripojeni = mysqli_connect("localhost","root","heslo","login");if(!empty($_POST["log"])) { $heslo=$_POST["password"]; $result = mysqli_query($pripojeni,"SELECT * FROM users WHERE username='" . $_POST["username"] . "'"); $row = mysqli_fetch_array($result); { if(is_array($row)) { if(password_verify($heslo, $row["password"])){ $_SESSION["user"] = $row['username']; } var_dump(password_verify($heslo, $row["password"])); var_dump($_SESSION); } }}if(isset($_POST["logout"])){ $_SESSION['user'] = "Guest"; session_regenerate_id(true);}... a toto mi trůuje. Ale jak jsem psal, je to kód děsný a být tebou, udělám to komplet znova

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 63.0.3239.132  |  [213.192.12.---]

Ok díky moc, už to funguje, mimochodem mohl byste mi prosím případně říci, kde byla chyba, pokud jste ji našel?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 57.0

Já žádnou chybu nehledal a nic jsem neopravoval Jen jsem to upravil tak, aby to to sedělo na tu mou tabulku v databázi, kterou používám na testování v jiném skriptu

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 57.0

A pro jistotu ještě jednou, ten kod (tvůj i můj upravený) je fakt hroznej, udělej to fakt znova.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Unknown AppleMAC-Safari 5.0  |  [90.181.48.---]

Ja v PHP (nastesti) nedelam, ale neda mi to a zeptam se - odkdy se <form> dava pred <html> ?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Unknown Firefox 57.0  |  [37.48.52.---]

Je to kvuli tomu, ze jsem postoval 2 skripty ze dvou php souborů do jednoho článku, ale koneckonců html tag se teoreticky ani psat nemusi

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 57.0

No a proč tedy řešíš takovou blbost?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Unknown Firefox 57.0  |  [37.48.52.---]

V tom prvnim php siuboru tedy nemam hml tagy vuvec generovane

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 57.0

Já nějaké správné dávání form a html neřešil, prostě jsem zkopíroval ten tvůj kod celý, dal jsem ho do jednoho skriptu a upravil aby seděl na mou tabulku v databázi, toď vše - jen kvůli tomu, abych zjisti proč ti to falsuje.Kdybych to měl dělat já tak bych ten skript dělal úplně jinak.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 63.0.3239.132  |  [213.108.162.---]

vždyť já proti tomu nic nenamítal.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 57.0

Pro inspiraci se podívej tady: https://php.vrana.cz/bezpecne-prihlasovani-uzi... Používá se tam mimo md5 handshake při přihlašování, hashování na klientovi (js knihovna), takže to nepůjde jen okopírovat

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 57.0

Si děláš kozy? 12 let starý článek má použít jako inspiraci?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 57.0

Jo, proč ne? Je to funkční kód (možná i v aktuálním PHP), který nemůže 1:1 zkopírovat, je rozumně popsaný a když ho tazatel pochopí, tak se se svým problémem vypořádá a něco se přitom naučí.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 57.0

Ty musíš být fakt cáklej. Víš vůbec co se v tom článku hlavně řeší? Náhrada za https. Jednak to tazatel neřeší a jednak https je dnes už dokonce na některých freehostinzích jako php5.cz, tak nechápu proč by něco jako "Bezpečné přihlašování uživatelů" ve smyslu bezpečném přenosu dat mezi klientem a serverem bez https měl tazatel řešit.Dalším nesmyslem je to, že rozšíření mysql_query v aktuálních plně podporovaných verzích php už jaksi je odstraněné.A teď nějak nechápu co z toho tvého článku by jako mohl použít, odpovím si sám, NIC.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 57.0

Klid, z toho vyrosteš

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 57.0

Z čeho? Z toho, že někoho přestanu válcovat argumentama, když píše íčoviny? Asi těžko.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Firefox 57.0

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 57.0

Ty se umíš tak akorát blbě řehtat. Já jsem zato chytřejší a mám větší péro.

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Heslo, MD5, Input, Ulice, Login, Text, Form, Běžný uživatel, Hashovací funkce



Určitě si přečtěte


Aktuální číslo časopisu Computer

Jak rychlé je nabíjení bez drátů?

Test 11 sluchátek pro hráče

Aplikace, které vám zachrání dovolenou

Kompletní přehled datových tarifů