Die Absicht der MySQL-Injection besteht darin, die Website-Datenbank zu übernehmen und Informationen zu stehlen. Gängige Open-Source-Datenbanken wie MySQL werden von vielen Website-Entwicklern verwendet, um wichtige Informationen wie Passwörter, persönliche Informationen und Verwaltungsinformationen zu speichern.
MySQL ist beliebt, weil es mit der beliebtesten serverseitigen Skriptsprache PHP verwendet wird. Darüber hinaus ist PHP die Hauptsprache des Linux-Apache-Servers, der das Internet dominiert. Das bedeutet also, dass Hacker PHP genauso leicht ausnutzen können wie Windows-Spyware.
Hacker geben große Mengen bösartigen Codes in ein ungesichertes Webformular ein (über Dropdown-Menüs, Suchfelder, Kontaktformulare, Abfrageformulare und Kontrollkästchen).
Der Schadcode wird an die MySQL-Datenbank gesendet und dort „eingeschleust“. Um diesen Prozess anzuzeigen, betrachten Sie zunächst die folgende grundlegende MySQL-SELECT-Abfrageanweisung:
SELECT * FROM xmen WHERE username = 'wolverine'
Diese Abfrage fordert die Datenbank mit der Tabelle „xmen“ auf, ein bestimmtes Datenelement mit dem Benutzernamen „wolverine“ zurückzugeben. in MySQL.
Im Webformular gibt der Benutzer „Wolverine“ ein und diese Daten werden an die MySQL-Abfrage übergeben.
Wenn die Eingabe ungültig ist, gibt es für Hacker andere Möglichkeiten, die Kontrolle über die Datenbank zu übernehmen, z. B. das Festlegen des Benutzernamens:
' ODER ''=''
Sie denken vielleicht, dass es sicher ist, die normale PHP- und MySQL-Syntax zum Ausführen der Eingabe zu verwenden, weil Jedes Mal, wenn jemand bösartigen Code eingibt, erhalten Sie die Meldung „Ungültige Abfrage“, aber das ist nicht der Fall. Hacker sind schlau und jede Sicherheitslücke ist nicht einfach zu beheben, da sie eine Datenbankbereinigung und das Zurücksetzen von Administratorrechten erfordert.
Zwei häufige Missverständnisse über MySQL-Injection-Angriffe sind folgende:
1. Netzwerkadministratoren glauben, dass bösartige Injektionen mit Antiviren- oder Anti-Spyware-Software bereinigt werden können. Tatsache ist, dass diese Art von Infektion Schwachstellen in der MySQL-Datenbank ausnutzt. Es kann nicht einfach durch ein Anti-Spyware- oder Antivirenprogramm entfernt werden.
2. Die MySQL-Injection erfolgt durch das Kopieren einer infizierten Datei von einem anderen Server oder einer externen Quelle. Dies ist nicht der Fall. Diese Art von Infektion tritt auf, wenn jemand bösartigen Code in ein ungeschütztes Formular auf einer Website eingibt und dann auf die Datenbank zugreift. Die MySQL-Injection kann durch Entfernen des schädlichen Skripts bereinigt werden, anstatt ein Antivirenprogramm zu verwenden.
Der Validierungsprozess der Benutzereingaben
sichert eine saubere Datenbank und speichert sie vom Server. Exportieren Sie eine Reihe von MySQL-Tabellen und speichern Sie sie auf dem Desktop.
Gehen Sie dann zum Server und schalten Sie zunächst die Formulareingabe vorübergehend aus. Das bedeutet, dass das Formular die Daten nicht verarbeiten kann und die Website abgeschaltet wird.
Starten Sie dann den Bereinigungsprozess. Bereinigen Sie zunächst alle verbleibenden, unordentlichen MySQL-Injektionen auf Ihrem Server. Ändern Sie alle Datenbank-, FTP- und Website-Passwörter.
Im schlimmsten Fall, wenn Sie mit dem Aufräumen zu spät kommen, können Sie noch einmal nachsehen, ob auf Ihrem Server versteckte Programme laufen. Bei diesen versteckten Programmen handelt es sich um von Hackern installierte Trojaner. Entfernen Sie es vollständig und ändern Sie alle FTP-Berechtigungen. Scannen Sie den Server auf alle Trojaner und Malware.
Wenn Sie das PHP-Skriptprogramm ändern, werden die Formulardaten verarbeitet. Eine gute Möglichkeit, MySQL-Injection zu verhindern, besteht darin, Benutzerdaten nicht einmal zu vertrauen. Die Validierung von Benutzereingaben ist sehr wichtig, um eine MySQL-Injection zu verhindern.
Um einen Filter zum Herausfiltern von Benutzereingaben zu entwerfen, finden Sie hier einige Tipps:
1. Die Eingabe in das Formular besteht aus Zahlen. Sie können überprüfen, ob es sich um eine Zahl handelt, indem Sie testen, ob sie gleich oder größer als 0,001 ist (vorausgesetzt, Sie akzeptieren keine Null).
2. Wenn es sich um eine E-Mail-Adresse handelt. Überprüfen Sie, ob es aus zulässigen Zeichenkombinationen wie „@“, AZ, az oder einigen Zahlen besteht.
3. Wenn es sich um den Namen oder Benutzernamen einer Person handelt. Es kann dadurch überprüft werden, ob es illegale Zeichen wie und und * enthält, bei denen es sich um bösartige Zeichen handelt, die für die SQL-Injection verwendet werden können.
Validieren einer numerischen Eingabe
Das folgende Skript überprüft, ob eine gültige Zahl von 0,001 bis unendlich eingegeben wurde. Erwähnenswert ist, dass Sie in einem PHP-Programm sogar die Verwendung von Zahlen innerhalb eines bestimmten Bereichs zulassen können. Verwenden Sie dieses Validierungsskript, um sicherzustellen, dass nur eine Zahl in das Formular eingegeben wird.
Angenommen, Sie haben drei numerische Variablen in Ihrem Programm. Sie müssen sie validieren. Nennen wir sie Num1, Num2 und Num3:
// Numerische Eingabe validieren
if($_POST['num1'] >= 0,001 && $_POST['num2'] >= 0,001 && $_POST['num3'] >= 0,001){
}else{
}
?>
Und die Bedingung kann erweitert werden, um mehr als drei Zahlen aufzunehmen. Wenn Sie also 10 haben, müssen Sie nur die AND-Anweisung erweitern.
Dies kann zur Validierung eines Formulars verwendet werden, das nur Zahlen akzeptiert, z. B. Vertragsmengen, Lizenznummern, Telefonnummern usw.
Text- und E-Mail-Adresseingaben validieren
Folgendes kann verwendet werden, um Formulareingaben wie Benutzernamen, Vornamen und E-Mail-Adressen zu validieren:
//Texteingabe validieren
if (! preg_match('/^[-az.-@,'s]*$/i',$_POST['name'])){
}
elseif ($empty==0){
}else{
}
?>
Ein Vorteil dieses Validierungsskripts besteht darin, dass es keine leeren Eingaben akzeptiert. Einige böswillige Benutzer manipulieren Datenbanken auch durch leere Eingaben. Validieren Sie mit dem obigen Skript nur eine Literalvariable, „$name“. Das heißt, wenn Sie über drei Textvariablen verfügen, können Sie für jede Variable ein Validierungsskript einrichten, um sicherzustellen, dass jede Variable die Prüfung besteht, bevor sie in die Datenbank gelangt.