php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
PHP: $_GET-Daten-Sicherheit (XSS/SQL-Injection/Code-Injection)


 
dreman
22-01-2009, 19:21 
 
Hallo,


foreach ($_GET as $key => $val) {
$val=str_replace(" ", "", $val);
$val=str_replace("%20", "", $val);
$val=mysql_real_escape_string($val);
$val=substr($val, 0, 15); ## GETs sind auf 15 Zeichen begrenzt!
$val=htmlentities($val);
$_GET[$key]=$val;
}

(Code ist noch nicht optimiert, soll erstmal gut lasbar sein)

Dieses For-Each läuft durch alle GET-Einträge durch und versucht sie bestmöglich zu säuber, bzw. böse Dings um zu codieren (espacen/html-zeichen zu codieren).
Habe ich etwas wichtiges übersehen?

Besteht noch eine wichtige Sicherheitslücke, die ich besser schließen sollte?


Danke für Tipps.

 
ghostgambler
22-01-2009, 20:12 
 
Das ist vollkommener Schwachsinn den du da betreibst.
Man escaped für bestimmte Zwecke wofür man den Wert gerade braucht - nicht einfach mal prophylaktisch ALLE Funktionen anwenden. Das wiederum behindert nämlich dann beim vernünftigen Programmieren.
Wenn du den Wert in einem Query verwenden willst, mysql_real_escape. Wenn du ihn ausgeben willst, htmlspecialchars.

Probier mal einen Wert auszugeben oder in die DB einzufügen, wenn du beide Funktionen anwendest - und dann guck dir mal den Müll an der da ausgegeben wird (natürlich musst du dann auch entsprechend & und " mal benutzen, weil darauf wirken die Funktionen ja).

 
Kropff
22-01-2009, 22:27 
 
außerdem gibt es immer noch andere manipulationsmöglichkeiten. schau dir ggf. mal das hier (http://www.peterkropff.de/tutorials/sicher_programmieren/sicher_programmieren.htm) an.

peter


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:35 Uhr.