1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

login php script was ist an dem falsch?

Dieses Thema im Forum "PHP" wurde erstellt von BlueVegetto, 7. Dezember 2016.

  1. BlueVegetto

    BlueVegetto Grünschnabel

    Code (PHP):
    1. <?php
    2. $pdo = new PDO('mysql:host=localhost;KKP', 'root', '');
    3. if(isset($_GET['login'])) {
    4. $email = $_POST['email'];
    5. $passwort = $_POST['passwort'];
    6. $statement = $pdo->prepare("SELECT * FROM User WHERE email = :email");
    7. $result = $statement->execute(array('email' => $email));
    8. $user = $statement->fetch();
    9. //Überprüfung des Passworts
    10. if ($user !== false && password_verify($passwort, $user['passwort'])) {
    11. $_SESSION['userid'] = $user['id'];
    12. die('Login erfolgreich. Weiter zu <a href="geheim.php">internen Bereich</a>');
    13. } else {
    14. $errorMessage = "E-Mail oder Passwort war ungültig<br>";
    15. }
    16. }
    17. ?>
    18. <!DOCTYPE html>
    19. <html>
    20. <head>
    21.   <title>Login</title>
    22. </head>
    23. <body>
    24. <?php
    25. if(isset($errorMessage))
    26. {
    27. echo $errorMessage;
    28. }
    29. ?>
    30. <form action="?login=1" method="post">
    31. E-Mail:<br>
    32. <input type="email" size="40" maxlength="250" name="email"><br><br>
    33. Dein Passwort:<br>
    34. <input type="password" size="40"  maxlength="250" name="passwort"><br>
    35. <input type="submit" value="Abschicken">
    36. </form>
    37. </body>
    38. </html>
     
  2. sheel

    sheel I love Asm Administrator

    Hi

    warum denkst du, dass es falsch ist? Was genau funktioniert nicht?

    edit: Ein sicherheitsmäßiges Problem:
    Deine Datenbank speichert Passwörter offensichtlich einfach so als Text. Das macht man nicht, aus vielen Gründen. Das Passwort zuerst durch bcrypt laufen lassen und nur das abspeichern; und hier beim Anmelden das empfangene Passwort bcrypten und die zwei bcrypt-Daten dann vergleichen.
     
    Zuletzt bearbeitet: 7. Dezember 2016
  3. Fragenfrager

    Fragenfrager Erfahrenes Mitglied

    Du fragst mal $_POST (Zeile 5 und 6) und mal $_GET-Variablen (Zeile 4) ab. Was hast Du denn nun?
    Und auch die $_POST-VAriablen solltest Du noch mit isset() abfangen.
     
    sheel gefällt das.
  4. -Jack001

    -Jack001 Mitglied

    Hallo,

    @Fragenfrager
    Er fragt mit der GET-Variable (Zeile 4) einen URL-Parameter ab.
    Zurück zum Thema:
    Mir ist noch dies aufgefallen:
    Bei dieser SQL-Abfrage fiel mir auf, das keine Variable im String ist:
    Zumindest würde ich die SQL-Abfrage so schreiben:
    Code (SQL):
    1. "SELECT * FROM User WHERE email = '$email'"
    Wie schon Fragenfrager sagte, solltest du die Eingaben vorher mit isset() behandeln.
    Ich empfehle dir noch, dass du Symbole wie ", <, >, & mithilfe der Funktion htmlspecialchars() in die HTML Entitäten umwandelst, um mögliche Fehler vorzubeugen.

    Bezüglich der GET-Variable:
    Ich würde an deiner Stelle nicht eine GET-Variable als Absende-Überprüfung nehmen, sondern überprüfen, ob der Button gesetzt ist.
    Dafür braucht der Button einen Namen, welchen du mit der isset() Funktion behandelst.
    PHP:
    1. if (isset($_POST['btn'])){
    2. //CODE
    3. }
    Vielleicht konnte ich dir etwas weiterhelfen

    Mfg
     
    BlueVegetto gefällt das.
  5. Fragenfrager

    Fragenfrager Erfahrenes Mitglied

    Setzte vor Zeile 5 und 6 mal ein Echo und gucke, ob die Variablen befällt werden.
    Ist das der Fall, führ Dein Sqlstatement mit dem Variablenwert direkt auf der Datenbank aus(Phpmyadmim). Bekommst Du das gewünschte Ergebnis?
    Und nebenbei: SELECT * sollte vermieden werden. Besser, sicherer und schneller ist es, nur die gewünschte Spalte abzufragen, also SELECT email,password FROM....
     
  6. sheel

    sheel I love Asm Administrator

    Bitte nicht. In dem Punkt ist BlueVegettos Code ganz richtig, und deine Änderung würde SQL-Injections erlauben.
     
  7. -Jack001

    -Jack001 Mitglied

    Danke für deinen Kommentar sheel,

    SQL-Injections kann man doch (soweit ich weiß), durch das maskieren von Zeichen, welche sich im SQL-Code befinden, verhindern.
    Hierbei habe ich bei Eintragungen die Funktion mysqli_real_escape_string() verwendet.

    Ist der Gebrauch der Funktion dennoch unzuverlässig oder wie?
    Mfg
     
  8. Bratkartoffel

    Bratkartoffel gebratene Kartoffel Premium-User

    Hi,

    wenn du schon mit prepare() arbeitest, dann würde ich auch gleich mit bind_parameter() arbeiten. Das "real_escape_string" ist ein Überbleibsel aus alten Tagen...

    Grüsse,
    BK
     
Die Seite wird geladen...
Ähnliche Themen - login script falsch
  1. impe
    Antworten:
    1
    Aufrufe:
    1.445
  2. djnijo
    Antworten:
    6
    Aufrufe:
    647
  3. nate
    Antworten:
    6
    Aufrufe:
    1.336
  4. Code46
    Antworten:
    6
    Aufrufe:
    416
  5. HTML-Tag_83
    Antworten:
    6
    Aufrufe:
    1.879