Thumbnail

Hallo und willkommen zurück zu einem neuen Tutorial, oder sollte ich sagen zu einer Erklärung wie man sich gegen SQL Injections wehren kann. Wir hatten beim letzten Tutorial einmal gezeigt, was zum Beispiel passieren kann, wenn man Usereingaben nicht korrekt behandelt.

In unserem Beispiel hatten wir damit einen Login umgangen und konnten uns ohne das richtige Passwort einfach einloggen und damit auf den geschützten Bereich zugreifen. Dieses Tutorial zeigt die theoretische Behandlung von Usereingaben mit “Prepared Statements”.

Ich simuliere in diesem Beitrag eine Datenbank Abfrage für einen Login und zeige, wie man dies behandelt.

<?php

$host = "localhost";
$user = "root";
$passwort = "";
$dbname = "mauricewoitzyk_db";

$con = mysqli_connect($host, $user, $passwort, $dbname);

if (!$con) {
   die("Keine Verbindung du Otto: " . mysqli_connect_error());
}

$sql = "SELECT * FROM users WHERE username = ? AND password = ?";
$stmt = $con -> prepare($sql);
$stmt = bind_param("ss", $username, $password);
$stmt -> execute();

?>

Wenn wir uns den Code anschauen, sehen wir, dass wir von Zeile 1 bis 12 eine einfache Datenbankverbindung aufbauen und eine Fehlermeldung ausgeben, wenn es dort ein Problem geben sollte. Das wirklich Interessante kommt erst danach.

Wie du sehen kannst, speichere ich eine SQL Anweisung innerhalb der Variable mit der Bezeichnung “sql”. Diese Anweisung wird nicht ungefiltert oder clean abgespeichert, sondern mit Fragezeichen. Diese Fragezeichen sind Platzhalter und genau das ist das wichtige.

Mit bind_param binden wir einen oder mehrere (wie in unserem Fall) Parameter an die Anweisung. Dazu sagen wir erst in welcher Form diese gebunden werden sollen. Ich habe dazu das “s” genutzt, also den String. Es gibt neben s für String zum Beispiel auch i = integer (Zahlen), d = double und b = blob. Allerdings ist s für String in jedem Fall richtig, sodass Ihr mit Ausnahme von i (für die Übersichtlichkeit) nichts anderes braucht.

Anschließend führen wir das Statement mit execute(); nur noch aus und sind fertig. Das wars auch schon :)! So einfach gehen sichere Anweisungen mit Prepared Statements. Es gibt im Übrigen eine wunderschöne Seite (auf Englisch), auf der Ihr euch dazu noch mehr belesen könnt. Wenn Fragen bestehen, wie immer einfach melden.

LG
Maurice!

Hallo! Ich bin Maurice. Ich komme aus dem wunderschönen Magdeburg und wenn ich nicht gerade in CS:GO verzweifle, vertreibe ich mir meine Zeit mit meinem Blog und Web Design/Web Development.

Leave a Reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.