MySQL Sicherheit – SQL Injection trotz mysql_real_escape_string (BIG5, GBK)

Gepostet am Januar 28, 2014

Problem Fall 1:

1
2
$query = "SELECT * FROM article WHERE id= " .
mysql_real_escape_string($_GET['id']) . "  LIMIT 1";

mysql_real_escape_string maskiert natürlich nur „gefährliche“ Zeichen wie Hochkomme oder Backslash.. trotzdem schützt der Befehl nicht vor einer Injection:

1
index.php?id=1 OR 1=1

1 OR 1=1 somit erfolgt eine Ausgabe durch eine MySQL Injection

Problem Fall 2:

Bypassing mysql_real_escape_string() mit BIG5 oder GBK
Ab folgenden MySQL Versionen ist der folgende Fehler gefixt: MySQL 4.1.20, 5.0.22, 5.1.11
In allen Unterversionen kann eine SQL Injection trotz mysql_real_escape_string durchgeführt werden.

Durch chinesische Zeichen kann der „mysql_real_escape_string“ ausgehebelt werden.

1
2
$query = "SELECT * FROM users WHERE username='admin' AND passwd='" .
utf8_decode(mysql_real_escape_string($_GET['pass'])) . "' LIMIT 1";
1
index.php?passwd=に関する追加情報:

Nach dieser Eingabe ist eine Anmeldung ohne Passwort möglich, trotz Escapen.

Lösung:

1
mysql_real_escape_string(utf8_decode($_GET['pass']))

utf8_decode vor dem Escapen schützt die Funktion.

Tags: ,

Leave a Reply

 

Posts of Current Category



Facebook: