login geht nicht

Patejoker

Grünschnabel
Hallo wieder einmal ich.
Ich habe in meiner Datenbank eine Tabelle Personal
Dort gibt es neben Namen, Vorname ebend auch Benutzername und Passwort

Leider jedoch klappt das ganze nicht reibungslos ich bekomm immer eine Fehlermeldung

PS: Ja ich weiß das man das Passwort nicht im Klartext übertragen soll, dieses wird dann noch auf md5 angepasst.

Hier mal das Skript:

PHP:
<?php
session_start();
$pdo = new PDO('mysql:host=localhost;dbname=d0281xxx', 'd028xxx', '123xxx');
if(isset($_GET['login'])) {
    $Benutzername = $_POST['Benutzername'];
    $passwort = $_POST['passwort'];
   
    $statement = $pdo->prepare("SELECT * FROM Personal WHERE Benutzername = $Benutzername");
    $result = $statement->execute(array('Benutzername' => $Benutzername));
    $user = $statement->fetch();
       
    //Überprüfung des Passworts
    if ($user !== false && password_verify($passwort, $user['passwort'])) {
        $_SESSION['userid'] = $user['id'];
        die('Login erfolgreich. Weiter zu <a href="index.php">Bestellformular</a>');
    } else {
        $errorMessage = "Benutzername oder Passwort war ung&uuml;ltig<br>";
        echo $Benutzername;
        echo $passwort;
    }
   
}
?>
<!DOCTYPE html>
<html>
<head>
   <head>
    <meta charset="utf-8">
    <h1><center><a href="http://dim.ag/"><img src="img/logo.png" alt="DIM AG" style="width:15%"></a></center></h1>
    <h5><center>Loginbereich f&uuml;r das Bestellformular</center> </h5>
    <link rel="stylesheet" href="css/css.css">
  </head> 
</head>
<body>
<center>
<?php
if(isset($errorMessage)) {
    echo $errorMessage;
}
?>
<form action="?login=1" method="post">
Benutzername:<br>
<input type="text" size="40" maxlength="250" name="Benutzername"><br><br>
Dein Passwort:<br>
<input type="password" size="40"  maxlength="250" name="passwort"><br>
<input type="submit" value="Abschicken">
</form>
</center>
</body>
</html>
 
Moin,

verrätst Du auch welche oder ist das ein Ratespiel?
VG Klaus


Sorry habe mich falsch ausgedrückt, ich bekomme immer die Meldung das Passwort und Benutzer nicht stimmen, daher hatte ich mir extra mal ausgeben lassen was übertragen wird, das stimmt alles (das sind die beiden Echo Zeilen unter der error Message (die da ja normal nicht hingehören))
 
Hmm hatte jetzt mal nen wenig gesucht und als hinweiss gefunden das mein password_verify gegen einen Hash prüft und ich ebend meine passwort mit password_hash bearbeiten muss, aber genau da ist jetzt mein Problem
 
$statement = $pdo->prepare("SELECT * FROM Personal WHERE Benutzername = $Benutzername");
Ich finde es sehr gut, dass du Prepared Statements nutzt. Leider öffnest du dennoch das Tor meterweit für SQL Injections, weil du sie falsch nutzt: Man sollte in den SQL String eben nicht externe Eingaben interpolieren, sondern stattdessen Platzhalter wie '?' verwenden.
 
Ich finde es sehr gut, dass du Prepared Statements nutzt. Leider öffnest du dennoch das Tor meterweit für SQL Injections, weil du sie falsch nutzt: Man sollte in den SQL String eben nicht externe Eingaben interpolieren, sondern stattdessen Platzhalter wie '?' verwenden.

Danke für den Hinweiß, da die seite aber eine reine Intranet Seite wird ist das mit dem SQL Injections jetzt nicht so das Problem. Aber werde mich der Sache sobald die andferen kleinen Problemchen gelöst sind widmen.
 
Wie steht denn das (gehashte) Passwort in der DB? Bist du sicher, dass der Hash wirklich von dem PW stammt, von dem du glaubst, dass es das richtige sei?
Im Zweifel würde ich das PW mit password_hash (und den für dich passenden Optionen - je nach Serverrechenleistung auch) nochmals neu generieren und in die DB abspeichern.
 

Neue Beiträge

Zurück