Felix Riesterer: Problem mit Loginscript (wahrscheinlich MySQL Fehler)

Beitrag lesen

Lieber MarkusH.,

Ich habe schonmal ein Login/Registrierscript geschrieben, doch das hab ich mit PDO gemacht. Dieses hier möchte ich aber gern mit MySQLi lösen.

warum?

login.php

Du machst etwas sehr gefährliches! Dein Code:

$user = strtolower($_POST["username"]);
[...]
$passwordstatment = $mysql->query( "SELECT password
            FROM users
            WHERE username = '$user'" );

Durch Deine Umkopiererei von Userinput in scheinbar harmlose Variablennamen übersiehst Du einen SQL-Injection-Angriffsvektor. Besser sieht man die Gefahr ohne die Umkopiererei:

$passwordstatment = $mysql->query(
  "SELECT password
   FROM users
   WHERE username = '".strtolower($_POST["username"])."'"
);

Die vom Benutzer eingegebenen Daten könnten auch keinen Benutzernamen, sondern SQL-Syntax beinhalten (siehe verlinkten Comic). Daher sollst Du das unbedingt lassen!

Warum liest Du nicht eine Liste der vorhandenen Benutzernamen in ein Array, am besten noch mit dem Passwort-Hash, und prüfst in einer Schleife, ob die Kombi passt? Der Anmeldeprozess darf ruhig eine Weile dauern, dann sind auch Brute-Force-Attacken auf Dein Loginscript weniger effektiv.

Liebe Grüße,

Felix Riesterer.