zisslaweng.de

 Home    CSS    PHP    HTML    JavaScript    Allgemein    Sitemap   exemption-filter

Sie sind in der Defensive, aber Sie können etwas tun:

Misstrauen Sie Allem, was Sie über $_GET[], $_POST[] oder Cookie erhalten, deshalb prüfen Sie. Das macht doch schon „magic quotes?” Na ja.

magic quotes

Meine subjektive Meinung: Wenn es möglich ist, sorgen Sie dafür, dass magic_quotes_gpc auf "off" steht (gpc steht für Get/Post/Cookie). Die Einstellung "on" bewirkt, dass

 ' , " , \ , NUL
automatisch mit einem Backslash "entwertet" (escaped) werden. Das führt nur allzu häufig zu Fehlern, wenn Sie z.B. Formulardaten wieder zurücksenden, weil eine erste Prüfung negativ ausging. Wenn Sie es nicht abschalten können, verwenden Sie diesen Schnippsel
...  if (get_magic_quotes_gpc()) {
     $value = stripslashes($value); 
   } ...
und entfernen damit die eingefügten "\" vor einer weiteren Bearbeitung.

meine Methode

Einige der hier aufgeführten Maßnahmen sind natürlich nicht immer sinnvoll, da kommt es auf den Verwendungszweck an, die Reihenfolge nicht unbedingt bindend.

  • Löschen Sie HTML und PHP Tags mittels strip_tags()
  • Verwenden Sie intval() wenn Sie eine Zahl/Ziffer erwarten. Konvertiert den String zu einer Ganzzahl und entfernt Zeichen, die keine Ziffern sind, z.B. Prüfung von PLZ.
  • Entfernen Sie überflüssige Leerzeichen am Anfang und Ende eines Strings mit trim()
  • Kürzen Sie den String auf die zulässige Länge. Entweder schon im Formularfeld mit "maxlength" oder schneiden Sie bei der Prüfung ab mit substr()
  • Benutzen Sie bei Bedarf die unten vorgestellte Funktion SAE() (steht für search and escape - angelehnt an SAR = Search and Rescue)
  • und spätestens im SQL-String selbst sollten Sie die Funktion mysqli_real_escape_string() für jeden Userinput verwenden

Bei Verwendung von mysqli_real_escape_string() und SAE() beachten Sie, dass sich die zu ersetzenden Character nicht überschneiden.
Zur Erinnerung: mit mysqli_real_escape_string() werden die Character

NUL (ASCII 0), \n, \r, \, ', ", Ctrl-Z
entwertet.

Ich mag die dumm herumliegenden, kurzen Callback-Funktionen nicht, hier: ersetze(). Daher eine SAE_long() und die von mir bevorzugte SAE() Version. Zwischen den /[ und ]/ die Character, die escaped werden sollen. Dabei müssen die Character

 - , ' , " 
(in Worten: minus, einfaches, doppeltes Anführungszeichen) mit vorangestelltem "\" angegeben werden, oder gleich die Oktal- oder Hex-Schreibweise verwenden.

SAE_long()

function ersetze($i) {return "\\".$i[0];}

function SAE_long ($str)
{ return preg_replace_callback('/[%_\-;]/', "ersetze", $str); }

SAE()

function SAE ($str)
{ return preg_replace_callback('/[%_\-;]/',
create_function('$e','return "\\\".$e[0];'), $str);}
Logo