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

Wie funktioniert SQL-Injection und wie schütze ich mich dagegen

Eine SQL-Injection ist eine in böswilliger Absicht erstellte SQL-Abfrage, die verwendet wird, um eine SQL-Datenbank so zu „verwirren“, dass sie etwas gibt, was sie nicht geben sollte. Betrachten Sie beispielsweise die folgende Abfrage

"SELECT * FROM `users` WHERE `username` = '$name'";

Im Normalfall wird das funktionieren. Wenn wir hier „Jack“ einreichen, werden alle Benutzer mit dem Namen Jack zurückgegeben. Wenn ein Benutzer jedoch beispielsweise "' OR 1=1" eingibt, lautet die resultierende Abfrage

"SELECT * FROM `users` WHERE `username` = '' OR 1=1";

Da 1 immer gleich 1 ist und die Kombinationsklausel OR ist, wird dies in jeder Zeile wahr zurückgegeben, was wiederum dem böswilligen Benutzer JEDE Zeile anzeigt. Mit dieser Technik kann jemand Ihre gesamte Datenbank einsehen. Überlegen Sie auch, ob jemand etwas wie "'; DROP TABLE users übermittelt ";--, was zu

führt
"SELECT * FROM `users` WHERE `username` = ''; DROP TABLE `users`";--";

Das sind zwei Abfragen, eine, die nichts bewirkt, die zweite, die die GESAMTE Benutzerdatenbank löscht, was zum Verlust Ihrer Daten führt.

Die beste Methode, um SQL-Injections zu verhindern, ist die Verwendung vorbereiteter Anweisungen. Damit senden Sie eine Abfrage an die SQL-Datenbank, die etwa so lautet:

"SELECT * FROM `users` WHERE `username` = '?'";

Dadurch wird der Datenbank das Format der Abfrage mitgeteilt (WObei der Benutzername einem bestimmten Wert entspricht), sodass bei einer Klartextabfrage keine Verwirrung entsteht. Dann weiß die Datenbank, dass sie einen Wert erwartet und wo er abgelegt werden muss. Dann übergeben Sie diesen Wert an die Datenbank, die sie zum Suchen verwenden kann. Dies ist auch besser, da die Datenbank die Abfrage für eine schnellere Suche optimieren kann.

Informieren Sie sich über vorbereitete Erklärungen, die dies ausführlicher erläutern.