Im Neuen PHP-Code Snippet, Sie sind immer noch anfällig für Injektionen.
Sie verwenden eine vorbereitete Aussage im Einfügungsteil, aber Sie verwenden die Präparatestärken nicht wirklich richtig.
Beim Erstellen einer vorbereiteten Anweisung erstellen Sie eine Abfrage, in der Sie anstelle der Rohwerte Platzhalter hinzufügen:
$stmt = $conn->prepare("INSERT INTO Users (email, pw) VALUES (?, ?)");
Die Fragezeichen sind die Platzhalter und werden später durch den bind_param
ersetzt Methode:
$stmt->bind_param('ss', $email, $pw);
Die ss
Ein Teil des Bind-Aufrufs teilt der mysql-Datenbank mit, dass ihre beiden Strings, die an die Datenbank übergeben werden (s für string
, ich für int
usw.).
Sie binden einen Parameter ($name
), aber es hat keinen Platzhalter oder irgendeine Art von Referenz in der Abfrage..?
Ihre select-Anweisung hingegen ist immer noch unsicher und anfällig für Sicherheitslücken.
Ich würde dort wahrscheinlich eine vorbereitete Anweisung verwenden, genau wie beim Insert-Teil.
Sie möchten immer sicherstellen, dass die Eingabe des Benutzers für die Datenbank "sicher" ist. Wenn Sie eine Abfragezeichenfolge verketten und Benutzereingaben hinzufügen, entkommt die Datenbank den Zeichenfolgen nicht, sondern führt sie einfach aus.
Verwenden Sie nur die Standard query
Methodenaufrufe, wenn Sie die vollständige Abfrage selbst schreiben, ohne Eingabeparameter und insbesondere ohne Eingabeparameter, die der Benutzer übergeben hat!