Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP / MySQLi:So verhindern Sie die SQL-Injection bei INSERT (Code funktioniert teilweise)

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!