SQL-Injections mit mysqli_real_escape_string verhindern
Als SQL-Injections bezeichnet man Angriffe auf eine SQL-Query bei der Werte eingeschleusst werden, die vom Webseitenbetreiber eigentlich so nicht vorgesehen waren.
$query = "SELECT * FROM users WHERE user='$user' AND password='$password'";
Nun könnte ein Angreifer ins Formularfeld Password den String ' OR 1=1' eingeben, um sich als admin einzuloggen. Was würde aus der Query dann werden? Sie lautete:
SELECT * FROM users WHERE user='admin' AND password='' OR 1=1'
Weil 1=1 immer wahr ist würde SQL die Bedingung also als erfüllt ansehen und dem Nutzer das einloggen erlauben. Hier kommt mysql_real_escape_string ins Spiel.
Eine Query, deren Eingaben mit mysqli_real_escape_string maskiert worden sind, bietet diese Angriffsgefahr nicht! So zum Beispiel:
$query = "SELECT * FROM users WHERE user='" . mysqli_real_escape_string($verbindung, $user) . "' AND password='" . mysqli_real_escape_string($verbindung, $password) . "'";