Frage zu SQL-Injections

Sasser

Erfahrenes Mitglied
Guten Tag!

Ich überlege gerade, alle Variablen welche mit der Datenbank in Berührung kommen mit:

PHP:
mysql_real_escape_string ();

zu escapen. Frage: Ist das sinnvoll, oder sollte man sich die Mühe machen und schauen ob es überhaupt nötig ist? Am sichersten wäre es ja schon, da dann keine Lücke mehr da ist über welche man etwas einschläusen könnte...

Was haltet ihr davon?
 
Generell solltest du zwar auch vorher schon deine Daten prüfen, z.B. ob eine vom Nutzer übergebene Variable (GET, POST) auch eine Zahl ist, wenn du eine Zahl erwartest. Aber es schadet nicht überall mysql_real_escape_string zu verwenden. Es geht auch nicht nur um SQL-Injections, sondern wenn jemand in dein Gästebuch schreib "Ich hab's geschafft!", dann gibts einen MySQL-Syntaxfehler, wenn du die Eingabe nicht abfängst, auch wenn der Nutzer nichts böses wollte.

Noch besser wäre es, direkt Parameter zu verwenden. Aber wie das in PHP funktioniert, weiß ich nicht, da ich kein PHP Entwickler bin.
 
Hallo und danke für die schnelle Antwort!

Natürlich prüfe ich bei vielen Sachen schoneinmal vorab, ob das übergebene dem jeweiligen entspricht.

Wie aber bereits schon gesagt wurde, kommt es ab und zu vor dass Texte verarbeitet werden sollen und da kann man so gut wie nicht nach bestimmten Kriterien überprüfen.

Nochmals eine Frage dazu:

Ich habe eine Funktion geschrieben, welche aus einer Datenbank bestimmte Daten zu einem User holt:

PHP:
$date = userdetail ( "date", $user );

Zu 99 % ist die Variable aus dem System, kann also keine gefährlichen Sachen etc. enthalten. Ab und zu nutze ich diese aber, um zu prüfen ob der User vorhanden ist:

PHP:
if (userdetail ( "user", $POST ["user"] ) != "") {
}

Sollte man nun mysql_real_escape_string (); erst in der Funktion verwenden, oder immer mit beim Aufruf der Funktion verwenden:

PHP:
if (userdetail ( "user", mysql_real_escape_string ( $POST ["user"] ) ) != "") {
}
 
Zuletzt bearbeitet:
Schöner wäre es innerhalb der Funktion, denn der Aufrufer der Funktion sollte sich generell keine Gedanken darum machen müssen. Ich würde generell immer mysql_real_escape_string() nutzen. Aber vielleicht äußert sich noch jemand dazu, denn ich nutze seit kurzem ausschließlich Parameter und muss mir keine Gedanken mehr darum machen und kann auch nirgendwo vergessen etwas zu escapen.
 
Zurück