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

Beste Möglichkeit, SQL-Abfragen in PHP zu sichern

Die Abfrage, die Sie in der Frage gezeigt haben, verwendet keine vom Benutzer bereitgestellten Werte, daher gibt es keinen Fall von SQL Injection, sondern einen allgemeinen Fall:-

Zuerst müssen Sie alle validieren die Benutzereingaben (Benutzernamen, E-Mails usw.), bevor sie in einer Abfrage verwendet werden. Zum Beispiel:- Wenn Sie nur alphanumerische Zeichen in einem Benutzernamen zugelassen haben, müssen Sie überprüfen, ob die Eingabe tatsächlich alphanumerisch ist oder nicht, bevor Sie mit der Erstellung einer Datenbankabfrage fortfahren, und Sie müssen auch die Größe aller Eingaben überprüfen.

Danach sind meiner Meinung nach Prepared Statements die beste Wahl, um SQL-Injection zu verhindern.

Problem mit mysql_real_escape_string():-

Da mysql_real_escape_string() Zeichen gemäß dem Standardzeichensatz maskiert, ist es besser als die Funktion addedlashes() und bereinigt SQL-Injektionen, die aus dem Missbrauch von Multibyte-Zeichensätzen entstehen , aber in einem anderen Artikel hier , wird ein Workaround-Szenario gezeigt, das erklärt, dass die Injektion dennoch durchgeführt werden kann.

Lösung:-

Der richtige und bessere Weg, SQL-Injection zu verhindern, ist also die Verwendung vorbereiteter Anweisungen. Es ist eine Technik, bei der SQL-Anweisungen vor dem Einfügen der Benutzereingaben (Parameter) vorkompiliert und als wiederverwendbare SQL-Vorlagen behandelt werden. Es trennt also die Benutzereingabe vom eigentlichen SQL-Code und der SQL-Parser analysiert niemals die Benutzereingabe.

Neben der Sicherheit wird die SQL-Abfrage auch auf Geschwindigkeit optimiert. Es hilft in Fällen, in denen Sie dieselbe Abfrage mehrmals mit unterschiedlichen Benutzereingaben ausführen müssen.

Details zur Implementierung finden Sie im PHP-Handbuch.