password_verify - godkänner inte lösenordet

Trädvy Permalänk
Medlem
Plats
Kalmar
Registrerad
Aug 2011

password_verify - godkänner inte lösenordet

Hej, håller på med ett litet projekt, och vad jag försöker åstadkomma är att man kan logga in, vilket funkade jätte bra innan jag började hasha lösenorden.

Så det jag gjorde va att jag tömde databasen och gjorde ett script för att kunna skapa användare med hashade lösenord, vilket funkar bra och databasen får rätt information.

Men när jag ska hämta data från databasen och jämföra lösenordshashen mot plaintext så funkar det inte.

<?php error_reporting(E_ALL); $myServer = "REDACTED"; $myUser = "REDACTED"; $myPass = "REDACTED"; $myDB = "REDACTED"; $dbhandle = mssql_connect($myServer, $myUser, $myPass) or die("Couldn't connect to SQL Server on $myServer"); //connection to the database session_start(); if (isset($_GET["login"])) { $username = $_POST["username"]; $password = $_POST["password"]; $query = "SELECT * FROM [REDACTED].[dbo].[userdata]"; $result = mssql_query($query); while ($data = mssql_fetch_assoc($result)) { if ($username == trim($data["username"]) AND password_verify($password, $data["password"])) { $_SESSION["username"] = $data["username"]; $_SESSION["password"] = $data["password"]; $_SESSION["userlevel"] = $data["userlevel"]; header('location:data.php'); }else{ echo "<br>failed<br>"; } } } ?> <!DOCTYPE html> <html lang="en"> HTML JIBBERJABBER - irrelevant </html> <?php mssql_close($dbhandle); ?>

Dold text

Anledningen till varför jag använder trim är för det skapas whitespace av någon konstig anledning i kombination med MS-SQL, jag hade det runt password innan också tills jag hashade och då verkade det inte skapa några whitespace runt lösenordet.

Vid felsökning så accepterar den användarnamnet men inte lösenordet, med eller utan trim.

Någon som har några idéer ?

.:[Main System - Chassi: Fractal Design Define R2 XL - Moderkort: Gigabyte GA-970A-UD3 - CPU: AMD FX-8350 - RAM: Corsair XMS3 1333MHz 4GB x4 - GFX: Gigabyte Radeon R9 290X - Systemdisk: ADATA SP900 SSD]:.
Citera för svar!

Trädvy Permalänk
Medlem
Plats
Borås
Registrerad
Jul 2004

Inte så jätte konstigt, eftersom du går igenom HELA din databas, rad för rad och om du inte loggar in som första användare kommer du börja skriva ut resultat mot klienten, dvs <br>failed<br>.

Sedan på grund av att du har nu börjat skicka ut data mot klienten så kan du inte skicka Header information längre, dvs header('location:data.php'); kommer inte fungera.

Så fixa din SQL fråga så du tar bara ut användaren i fråga och kolla enbart den.

Det finns fler brister i din kod men börja med det problemet.

Speldator: SB i7-2600k @ 4,5Ghz P8Z68-V Pro, 16GB DDR3, GTX1070
Server 1: SB 2500k, MZI -P67GD55, 32GB DDR3, Corsair MX 240GB SSD
Surface Pro 2017, Konsoler: Typ alla, Oculus Rift