SQL-Injection, die mysql_real_escape_string() umgeht – wie schützt man sich?
Hallo zusammen! Ich bin ein PHP-Anfänger und bin auf eine sehr seltsame Situation gestoßen. In vielen Foren wird geschrieben, dass die Funktion `mysql_real_escape_string()` ein zuverlässiger Schutz vor SQL-Injection ist, und ich habe sie immer verwendet. Aber neulich habe ich gelesen, dass es Möglichkeiten gibt, sie zu umgehen, und das hat mir große Angst gemacht.
Ich habe einen einfachen Code für die Benutzeranmeldung:
```php
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = mysql_query($query);
```
Ich dachte, dass das Escapen aller Anführungszeichen und Sonderzeichen die Abfrage sicher macht. Aber es heißt, dass bei Verwendung einer Multibyte-Kodierung (z.B. GBK oder SJIS) eine Zeichenfolge gewählt werden kann, die den Escape-Backslash „verschluckt“ und das Einfügen von beliebigem SQL-Code ermöglicht. Stimmt das? Wie genau funktioniert das? Und vor allem – wie schütze ich meine Abfragen jetzt richtig? Nicht wahr...