Es ist heute immer wichtiger, dass Sie die Eingaben von einem User vor der Ausgabe bzw. Weiterverarbeitung per Escape escapen werden, um „Mysql Injection“ oder „Cross-Site-Scripting-Lücken“ zu verhindern.
Da es sonst möglich ist eine Manipulation von extern auf das Script zu machen. Man kann sich mit dieser Escape-Funktion davor schützen. Es ist zu empfehlen vor der Weiterverarbeitung einer Variable immer die Daten durch diese Funktion laufen zu lassen.
<?php
function cleaninput($input, mysqli $mysql) {
if (ini_get('magic_quotes_gpc') !== false &&
function_exists('get_magic_quotes_gpc')== true
&& get_magic_quotes_gpc()==1) {
$input = stripslashes($input);
}
$input = mysqli_real_escape_string($mysql, $input);
return $input;
}
$mysql=mysqli_connect("localhost","my_user","my_password","my_db");
// Ansprechen der Function per GET
$get_daten = cleaninput($_GET["get_daten"],$mysql);
echo $get_daten;
// Ansprechen der Function per POST
$post_daten = cleaninput($_POST["post_daten"],$mysql);
echo $post_daten;
?>
Erklärung:
Der oben gezeigte Code ist eine Funktion namens cleaninput(), die verwendet wird, um eine Eingabe von $_GET oder $_POST in einer MySQL-Datenbank zu bereinigen. Diese Funktion nimmt zwei Argumente entgegen: $input und $mysql. Der $input-Parameter ist der Wert, der aus dem $_GET oder $_POST-Array abgerufen wird. Der $mysql-Parameter ist eine Verbindung zur MySQL-Datenbank.
Als Erstes überprüft die Funktion, ob magic_quotes_gpc aktiviert ist. Wenn ja, werden die Anführungszeichen und Backslashes entfernt. Anschließend wird der $input-Parameter mit der mysqli_real_escape_string()-Funktion gesäubert. Diese Funktion ersetzt alle Zeichen, die eine SQL-Injection verursachen könnten, durch sichere Zeichen. Schließlich wird der gesäuberte Wert an die aufrufende Stelle der Funktion zurückgegeben.
Um die Funktion aufzurufen, muss sie mit dem $input-Parameter sowie einer gültigen MySQL-Verbindung aufgerufen werden. Im oben gezeigten Code wird die Funktion zweimal aufgerufen: einmal für den $_GET-Parameter und einmal für den $_POST-Parameter. Die gesäuberten Werte werden anschließend auf der Seite ausgegeben.
Wofür könnte die Funktion: cleaninput() verwendet werden?
Die Funktion cleaninput() kann in einer Vielzahl von Situationen verwendet werden, in denen Benutzerdaten aus Formularen oder anderen Eingaben verarbeitet werden müssen. Einige Beispiele sind:
- Verarbeitung von Benutzerregistrierungen
- Speichern von Benutzerprofildaten
- Verarbeiten von Benutzerbewertungen
- Speichern von Benutzerkommentaren
- Erfassen von Benutzereingaben in einer Datenbank
Was ist eine Mysql Injection?
Eine MySQL-Injection ist eine Art von Angriff, bei dem böswillige Benutzer schädlichen Code in ein Eingabefeld eingeben, um die Daten in einer MySQL-Datenbank zu manipulieren. Diese Art von Angriff kann durch falsch konfigurierte Anwendungen, die schlecht gesicherte Formulare oder unsichere Eingabefelder verwenden, erfolgen.
Ein Angriff kann beispielsweise auf folgende Weise erfolgen: Ein Angreifer kann einen SQL-Befehl in ein Eingabefeld eingeben, das an eine Datenbank angeschlossen ist. Wenn das Eingabefeld nicht ausreichend gesichert ist, kann der Befehl direkt an die Datenbank gesendet und ausgeführt werden. Der Angreifer kann dann etwa ein Administratorkonto erstellen, Datenbanktabellen ändern oder löschen, Benutzerkonten hacken oder sensible Informationen abrufen.
Was ist eine Cross-Site-Scripting-Lücke?
Cross-Site-Scripting (XSS) ist eine Art von Sicherheitslücke, die es Angreifern ermöglicht, schädlichen Code auf einer Website auszuführen. XSS-Angriffe werden normalerweise durch unsichere Eingabefelder auf einer Website ausgelöst, in die Benutzer HTML- oder JavaScript-Code eingeben können. Wenn ein Eingabefeld nicht ausreichend gesichert ist, kann der Code, den der Benutzer eingibt, auf der Website ausgeführt werden.
Ein Angriff kann beispielsweise auf folgende Weise erfolgen: Der Angreifer kann durch die Eingabe von schädlichem Code in ein Eingabefeld eine schädliche Skript-Datei auf der Website ausführen. Wenn ein Benutzer die betroffene Seite besucht, wird das Skript ausgeführt und kann dann unter anderem sensible Daten stehlen, Benutzerkonten hacken oder andere schädliche Aktionen ausführen.
Wie kann ich in PHP Cross-Site-Scripting-Lücken vermeiden?
Um Cross-Site-Scripting-Lücken in PHP zu vermeiden, sollten Entwickler die folgenden Strategien anwenden:
- Verwenden Sie immer die Funktionen htmlspecialchars() und htmlentities(), um HTML- und JavaScript-Code in Eingabefeldern zu säubern.
- Verwenden Sie niemals die Funktionen eval() oder exec() auf Benutzereingaben.
- Nutze die PHP-Funktionen stripslashes() und addslashes(), um Anführungszeichen und Backslashes zu entfernen.
- Verwenden Sie immer Input-Validation und Output-Encoding, um Eingaben zu validieren und auszugeben.
- Vor den Speichen verwende immer die Funktionen wie cleaninput(), strip_tags(), filter_input() und filter_var(), um Eingaben zu filtern.