PHP - SQL - Injection

akkie

Erfahrenes Mitglied
Hallo

Hab mal ne Sicherheits Frage.

Welches Beispiel währe Besser.

PHP:
$_GET['password'] = mysql_escape_string($_GET['password']);

$db->query("SELECT password FROM user WHERE password='".$_GET['password']."'");
oder

PHP:
$db->query("SELECT password FROM user WHERE password='".mysql_escape_string($_GET['password'])."'");

Meine Frage ist eigentlich ob mann den Code beim 1.Beispiel zwischen Zuweißung und SQL Abfrage beinflussen kann. z.B durch JavaScript

Mfg Akkie
 
$_GET und $_POST sollten immer READ ONLY behandelt werden.

Würdest du bei deinem ersten Beispiel eine normale Variable als zuweisung benutzen (also anstatt $_GET['password'] einfach nur $password ), kann man diese nicht durch javascript oder ähnliches beinflussen, da du ja mysql_escape_string benutzt.
 
Warum ich $_GET und $_POST nur READ ONLY behandeln sollte, mußt du mir mal genauer erklähren.

Meine 1.Frage hast du mir schon halb erklährt. Das hängt aber damit zusammen das ich sie auch nur zur Hälfte gestellt habe. :-)

Was ich nämlich noch Fragen wollte ist wenn ich zum Beispiel eine Variable($var) am Anfang des Scripts definiere, sollte ich diese auch mit mysql_escape_string() oder intval() behandeln.

Oder sollte mann alle Variablen die mann in einem SQL-String benutzt vorher behandeln?

Mfg Akkie
 
mysql_escape_string() sollte dazu verwendet werden, um Variablen für die Verwendung in SQL-Statement sicher zu machen - für nichts anderes! Deswegen ist es eine MySQL Funktion und keine allgemeine. Von daher favorisiere ich Dein gepostetes zweites Beispiel.

Warum die Arrays $_GET und $_POST nur gelesen werden sollten, kann ich auch nicht nachvollziehen. Wenn die Daten an das Script übermittelt sind, können sie ohnehin nicht mehr modifiziert werden. Also kann man auch gleich die Arrays modifizieren. Das spart zudem Speicher.

snuu
 
Zuletzt bearbeitet:
Zurück