MySQL Injection ist Akt der Einfügen MySQL -Anweisung in einer Datenbank , ohne das Wissen des Besitzers der Datenbank. Es wird im Allgemeinen durch Ausnutzung Benutzer Eingabefelder , die nicht geschützt sind ordnungsgemäß durchgeführt werden. Anstatt die Bereitstellung von Echtzeit -Eingang, der Besitzer der Datenbank gefragt hat , spritzt Benutzer eine MySQL -Anweisung, die das Verhalten der Abfrage ändert , um die Injektion von user Möglichkeit, die Datenbank zu manipulieren geben . MySQL Injektionen
Der einfachste Weg, zu verstehen und zu lernen, was wirklich doesis MySQL Injektion , einen Blick auf ein Beispiel nehmen . Eines der beliebtesten Möglichkeiten der Verwendung MySQLinjections ist , um Login- Kontrollen an Webseiten zu umgehen. Hier ist ein Beispiel für die awebsite über das folgende Formular an den Benutzer zu authentifizieren :
Nach dem Drücken Absenden von Daten eingegeben wird dann auf der Seite userlogin.php aufnimmt und führt durch eine Abfrage auf die Datenbank zu Zugriffsebene user überprüfen hat und wenn er den richtigen Benutzernamen und das Passwort eingegeben werden.
gesendet < ? $ username = $ _POST [' username' ] ; $ password = $ _POST [' password'] ; $ query = "SELECT Benutzername, Passwort FROM users WHERE username = '$ username' und password = '$ password' "; ? >
Diese Art von Login-Formular ist breit, um Ausbeutung zu öffnen durch MySQL -Injection-Angriffe . Um Zugriff auf die Website kann jeder Benutzer folgenden Code einfügen gewinnen : 'OR 1 = 1 - für Benutzernamen und ' OR 1 = 1 für Passwort
Abfrage wird nun wie folgt aussehen: $ query = "SELECT username . , Passwort FROM users WHERE username = '' OR 1 = 1 - "und password = '' OR 1 = 1 ";
Diese Abfrage Benutzername und Kennwort von den Benutzern , wo Benutzernamen oder Passwort nicht existieren ( wählen wird '' Teil) oder wenn eins gleich eins . Als eine Eins ist in allen Fällen der Datenbank Sicherheit beeinträchtigt wird. Zwei Striche vor Apostroph wurden hinzugefügt, um MySQL ignorieren Apostroph , das ist jetzt überflüssig. Dies ist nur eine Art von Angriff mit MySQL Injektion. Eine weitere Variante dieses Angriffs ist es GetAccess mehr Informationen als Benutzer erlaubt ist.
Nun ein Blick auf ein Beispiel, bei dem Datenbank-Besitzer wird mit folgenden queryto bekommen Daten für die Anzeige auf Benutzerkonto Info-Seite .
< P > $ query = " SELECT * FROM users WHERE username = '$ name' ";
Wenn diese Art der Abfrage nicht geschützt ist böswilliger Benutzer ist in der Lage, input'OR 1 = 1 - zu umgehen username überprüfen . $ query = " SELECT * FROM users WHERE username = '' OR 1 = 1 - '" ; . Diese Abfrage wird jetzt nicht nur wählen Daten des Nutzers , aber die Daten aller Benutzer in der Tabelle " Benutzer "
< br >
Schutz gegen MySQL Injections
Es gibt viele Möglichkeiten, um gegen MySQL Injektionen schützen. In der Tat MySQL Injektionen sind Drohungen nur dann, wenn der Entwickler hat die Drohung ignoriert und nicht in den Schutz seiner Code. Der einfachste Weg, um gegen Injektionen in PHP und MySQL Kombination zu schützen, ist PHP -Funktion: " mysql_real_escape_string "
Gehen wir zurück zum ersten Beispiel < $ username = $ _POST [' username' ] ; $ . . ? password = $ _POST [' password'] ; $ query = "SELECT Benutzername, Passwort FROM users WHERE username = '$ username' und password = '$ password' "; ? >
gegen MySQL Injektionen Zum Schutz direkte Verwendungen von Benutzereingaben müssen durch " mysql_real_escape_string " befiltered . Funktion " mysql_real_escape_string " entweicht alle MySQL Sonderzeichen Entfernen Möglichkeit , das Verhalten unserer Abfrage ändern
< $ username = mysql_real_escape_string ( $ _POST [ 'username ']); . ? $ Password = mysql_real_escape_string ( $ _POST [ ,"'password ']); $ query = "SELECT Benutzername, Passwort FROM users WHERE username = '$ username' und password = '$ password' "; ? >