Joopi

Normale Version: Sicherheit mit mysqli_real_escape_string
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Mittlerweile gewöhne ich mir meine eingefleischten Fehler ab und schreibe auch PHP-Code etwas besser - hoffentlich.

Die prepared statements habe ich bereits verstanden, nun ist es aber auch wichtig, dass ich die Erfassung von Daten in eine Datenbank gegen kriminelle Absichten schütze. Eine sql-injection ist nicht wirklich zu wünschen, daher werde ich mich auch hier vorsehen.

Ein einfache insert-Statement sieht wie folgt aus:

Code:
$idvorgang = $_REQUEST['n_idvorgang'];
$telefon   = $_REQUEST['n_telefon'];
$datum     = $_REQUEST['n_datum'];

$sql = mysqli_query($db, "INSERT INTO $tblname042 (id_vorgang, telefon, erfasst) VALUES ('$n_idvorgang', '$n_telefon', '$n_datum')");

Aus einem Formular werden Eingabe gelesen und in eine Tabelle erfasst. Bei dieser sehr effektiven, aber auch einfachen Art und Weise der Datenerfassung kann es leicht zu sql-injections kommen. Dieses gilt es zu verhindern. Der nachfolgende Code nutzt den Schutz davor:

Code:
$idvorgang = mysqli_real_escape_string($conn, $_REQUEST['n_idvorgang']);
$telefon   = mysqli_real_escape_string($conn, $_REQUEST['n_telefon']);
$datum     = mysqli_real_escape_string($conn, $_REQUEST['n_datum']);

$sql = "INSERT INTO $tblname042 (id_vorgang, telefon, erfasst) VALUES (?, ?, ?);";

$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
    echo "SQL error";
}
else {
    mysqli_stmt_bind_param($stmt, "sss", $idvorgang, $telefon, $datum);
    mysqli_stmt_execute($stmt);
}

Mit diesem Code werden die variablen Daten über mysqli_real_escape_string gegen Codeeinträge geschützt. Einem Hacker wird es so wesentlich schwerer gemacht, eine Webseite über eine sql-injection zu hacken.

Auch hier ist die vermehrte Code vielleicht als Nachteil zu sehen. Aber die Sicherheit geht vor, daher werde ich künftig meinen Code immer so aufbauen und bestehende PHP-Dokumente entsprechend korrigieren.