Hallo zusammen,
ich bin neu hier und habe noch recht wenig PHP-Kentnisse.
Ich versuche zur Zeit eine sichere(!) Benutzerauthentifizierung zu implementieren.
Momentan bin ich noch beim Script, um einen neuen User in die Datenbank einzutragen. Dabei gehe ich folgendermaßen vor:
- DB-Access über Include einbinden
- DB-Verbindung aufbauen
- Benutzereingaben mit FILTER_SANITIZE_STRING filtern
- Passwort mit password_hash() und mcrypt_create_iv() verschlüsseln
- DB-Eintrag mit prepared statements durchführen
- DB-Verbindung schließen
Beim ausführen erhalte ich folgende Fehlermeldung:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':user, assword, :email, :ip)' at line 2
Könnt ihr mir sagen wo der Fehler liegt? Außerdem würde gerne wissen wie ich das Passwort noch besser verschlüsseln kann und das Script im Allgemeinen sicherer machen kann.
Hier ist mein kompletter Quellcode:
ich bin neu hier und habe noch recht wenig PHP-Kentnisse.
Ich versuche zur Zeit eine sichere(!) Benutzerauthentifizierung zu implementieren.
Momentan bin ich noch beim Script, um einen neuen User in die Datenbank einzutragen. Dabei gehe ich folgendermaßen vor:
- DB-Access über Include einbinden
- DB-Verbindung aufbauen
- Benutzereingaben mit FILTER_SANITIZE_STRING filtern
- Passwort mit password_hash() und mcrypt_create_iv() verschlüsseln
- DB-Eintrag mit prepared statements durchführen
- DB-Verbindung schließen
Beim ausführen erhalte ich folgende Fehlermeldung:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':user, assword, :email, :ip)' at line 2
Könnt ihr mir sagen wo der Fehler liegt? Außerdem würde gerne wissen wie ich das Passwort noch besser verschlüsseln kann und das Script im Allgemeinen sicherer machen kann.
Hier ist mein kompletter Quellcode:
PHP-Code:
<?php
header('Content-Type: text/html; charset=utf-8');
include_once __DIR__ . '/includes/access/access.php';
@ $mysql = mysqli_connect($db_host, $db_user, $db_pwd, $db_name);
if (mysqli_connect_errno()) {
echo "<p>Fehler: Verbindung zur Datenbank nicht möglich. Versuchen Sie es zu einem späteren Zeitpunkt nochmal.</p>";
exit();
}
$user = filter_input(INPUT_POST, 'user', FILTER_SANITIZE_STRING);
$password = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING);
$email = NULL;
$ip = NULL;
if (!user || !$password) {
echo "<p>Bitte füllen Sie alle Felder aus.</p>";
exit();
}
$options = [
'cost' => 11,
'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
];
$password = password_hash($password, PASSWORD_BCRYPT, $options);
$query = "INSERT INTO users (user, password, email, ip) VALUES
(:user, :password, :email, :ip)";
if ($stmt = mysqli_prepare ($mysql, $query)) {
mysqli_stmt_bind_Param($stmt, ':user', $user);
mysqli_stmt_bind_Param($stmt, ':password', $password);
mysqli_stmt_bind_Param($stmt, ':email', $email);
mysqli_stmt_bind_Param($stmt, ':ip', $ip);
mysqli_stmt_execute($stmt);
echo "Der Benutzer wurde erfolgreich hinzugefügt.";
}
else {
echo $mysql -> error;
}
mysqli_close($mysql);
?>
Kommentar