Die Vermeidung der SQL -Injektion ist eine der obersten Prioritäten beim Erstellen eines sicheren Benutzerregistrierungssystems. Die Verwendung der Funktion MySQLI :: STMT_INIT mit vorbereiteten Aussagen ist eine sehr effektive Art und Weise. In diesem Artikel wird ein vollständiges Beispiel verwendet, um Schritt für Schritt zu erklären, wie Sie MySQLI :: STMT_INIT verwenden, um einen sicheren Benutzerregistrierungsprozess zu implementieren.
Stellen Sie zunächst sicher, dass Ihre PHP -Umgebung die MySQLI -Erweiterung aktiviert hat und Sie eine Benutzerregistrierung haben, z. B.:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE
);
Wir verwenden die MySQLI -Erweiterung, um die Datenbankverbindung herzustellen:
$mysqli = new mysqli("localhost", "db_user", "db_pass", "my_database");
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
Hier finden Sie den vollständigen Vorgang zum sicheren Registrieren von Benutzern:
// Angenommen, dies sind Werte, die aus der Form entnommen wurden,Denken Sie daran, grundlegende Überprüfung und Filterung durchzuführen
$username = trim($_POST['username']);
$password = $_POST['password'];
$email = trim($_POST['email']);
// Passwortverschlüsselung(verwenden password_hash Sicherheit verbessern)
$passwordHash = password_hash($password, PASSWORD_DEFAULT);
// Initialisierung statement Objekt
$stmt = $mysqli->stmt_init();
// Vorbereiten SQL Stellungnahme
if ($stmt->prepare("INSERT INTO users (username, password_hash, email) VALUES (?, ?, ?)")) {
// Binden Sie Parameter(s äußern string Typ)
$stmt->bind_param("sss", $username, $passwordHash, $email);
// 执行Stellungnahme
if ($stmt->execute()) {
echo "Erfolgreich registriert!Willkommen auf unserer Homepage:<a href='https://m66.net'>m66.net</a>";
} else {
echo "Registrierung fehlgeschlagen:" . htmlspecialchars($stmt->error);
}
// Schließung statement
$stmt->close();
} else {
echo "VorbereitenStellungnahme失败:" . htmlspecialchars($mysqli->error);
}
// Schließung数据库连接
$mysqli->close();
Obwohl wir auch $ MySQLI-> prepe () direkt verwenden können, bietet MySQLI :: STMT_INIT eine größere Flexibilität, insbesondere für weitere Vorgänge für Anweisungsobjekte in komplexen Szenarien, wie z. B. Einstellung von Eigenschaften oder Debuggen. Es kann ein mySQLi_stmt -Objekt separat initialisieren und dann SQL -Anweisungen durch Prepe () binden.
$stmt = $mysqli->stmt_init();
if (!$stmt->prepare($sql)) {
// Dies kann ohne gemacht werden SQL Überprüfen Sie die Syntaxfehler oder stellen Sie andere Einstellungen unter der Prämisse von vor
}
Eingabeüberprüfung und Reinigung : Verhindern Sie illegale Zeichen oder Skriptinjektion.
Kennwortsicherheit : Speichern Sie niemals Kennwörter explizit, verwenden Sie password_hash und password_verify .
Fehlerbehandlung : Vermeiden Sie es, Datenbankfehler direkt an Benutzer auszusetzen.
HTTPS -Übertragung : Stellen Sie sicher, dass das Registrierungsformular über HTTPS eingereicht wird, um die Daten im Durchschnitt zu schützen.
Die Verwendung von MySQLI :: STMT_INIT- und Vorverarbeitungsanweisungen ist ein wichtiger Schritt zum Erstellen eines sicheren Benutzerregistrierungssystems. Wenn die Anwendungskomplexität zunimmt, können Sie mehr Sicherheitsmechanismen wie Postbox-Überprüfung und Multi-Faktor-Authentifizierung hinzufügen, um die allgemeine Sicherheit zu verbessern. Denken Sie daran, jede Codezeile sollte als sicher angesehen werden!
Möchten Sie den Benutzeranmeldungsüberprüfungsprozess weiter verstehen?