Die einzige Möglichkeit besteht darin, vom Benutzer übermittelte Daten ordnungsgemäß zu maskieren. Andere haben auf einige Möglichkeiten hingewiesen, dies zu tun.
Es gibt einen anderen Weg:vorbereitete Erklärungen und Platzhalter. Vorbereitete Anweisungen werden von jedem modernen unterstützt PHP-Datenbankschnittstelle, einschließlich mysqli und PDO .
Lassen Sie uns PDO als Demonstration verwenden. Nehmen wir an, wir wollten ein paar Daten in der Tabelle foo
aktualisieren von einem Benutzer übermittelt.
$sql = 'UPDATE foo SET bar = ? WHERE user_id = ?';
$sh = $db->prepare($sql);
$sh->execute(array( $_POST['bar'], $_SESSION['user_id'] ));
Die Variablen im Array, die an execute
übergeben werden Ersetzen Sie die Fragezeichen-Platzhalter in der Abfrage. In diesem Fall werden sie automatisch maskiert und in Anführungszeichen gesetzt . Sie müssen sie nicht manuell maskieren, damit sie sicher in die Datenbank gestellt werden können!
Auf der anderen Seite müssen Sie sie immer noch nach unerwarteten Inhalten filtern, wie HTML, Javascript, Buchstaben, an denen Sie Zahlen erwarten, usw. Daten sicher in die Datenbank einzufügen ist nur die halbe Miete .