mySQL injection

Sancheck

Legendäres Mitglied
Hallo,

ich beschäftige mich aktuell mit MySQL Injections und habe nun folgenden gefährlichen Befehl:

QUOTE
$sql = "SELECT * FROM meinetabelle WHERE id='".$_GET['id']."'";




Wie kann ich hier einen Befehl 'Show Tables' einbauen? Irgendwie ist mir das noch nicht ganz klar,...?

 
mit folgenden URL aufruf werden dir alle Einträge angezeigt
CODE
url.de?id=5'\&1='1



Das Problem kannst du super einfach umgehen

CODE
$sql = "SELECT * FROM meinetabelle WHERE id='".(int) $_GET['id']."'";

 
thx
smile.gif
 
QUOTE (FilOO @ So 29.06.2014, 17:30) [...]
Wäre da ein mysql_real_escape_string nicht besser geeignet, da es generell die "bösen" Zeichen entfernt?
[...]

Nein, ein mysql_real_escape_string lässt mehr zu als ein Integer, wobei man aber eigentlich besser den Wert checkt und wenn er mehr als die Zeichen 0-9 enthält gleich das Script anhält.

Und außerdem sollte man nicht mehr neue Anwendungen auf die Mysql-Extension aufbauen, hier sollte lieber die Mysqli-Extension verwendet werden oder PDO.


BTW.
Am Besten arbeitet man mit Prepared Statements, wenn nicht gerade die Anwendung eine andere vorgehensweise erforderlich macht:
http://www.php.net/manual/de/mysqli.prepare.php

siehe auch: http://de.wikipedia.org/wiki/Prepared_Statement
 
Zurück
Oben