designer-ag
andre göntgen

duisburgerstr.16
53909 zülpich (nrw)

fon: 02252 833 229
fax: 02252 833 227

Artikel

... it-intelligence

Plausibilitäts-Prüfung von Variablen in PHP

Wer hat noch nicht gestaunt bei einem Blick in seine Statistik?
Da tauchen Versuche auf, einem Script falsche Variablen unterzujubeln,
mit dem Sinn und Zweck den Server gehörig zu machen und zu mißbrauchen.

Beispiel: /index.php?page=http://www.hackmich.com/user1/hack.txt
und eigentlich sollte da z.B. stehen ?page=1

Ideal für Angriffe sind natürlich Formulare wie
Kontaktformular, Gästebuch, Blog, Forum usw.

Man kann natürlich für jede Variable die benötigt wird ein paar Zeilen Code schreiben,
aber wenn einfacher geht...

Weiter zur Seite 2 mit der Funktion






Die Funktion:

function checkvars($array,$vars) {
 foreach ($array as $variable => $wert) {
  global $$variable;
  if (!array_key_exists($variable,$vars)) {
   unset($GLOBALS[$variable]);
   unset($_GET[$variable]);
   unset($_POST[$variable]);
   continue;
  }
  if (!ereg($vars[$variable],$GLOBALS[$variable])) {
   $GLOBALS[$variable]="";
   $_GET[$variable]="";
   $_POST[$variable]="";
   continue;
  }
 }
}


Der Aufruf (Beispiel):

checkvars($_GET,
 Array(
  "email"=>"^([a-zA-Z0-9]((\.|\-)?[a-zA-Z0-9])*)@([a-zA-Z]((\.|\-)?[a-zA-Z0-9])*)\.([a-zA-Z]{2,8})$",
  "datum"=>"^(([012][1-9])|(3[01]))\.((0[1-9])|(1[0-2]))\.(((19[0-9])|(20[01]))[0-9])$",
  "text"=>"^[a-zA-Z0-9ÄÖÜäöüß|.|:|!|?|+|-|*|/|_| ]+$",
  "zahl5p"=>"^[1-9][0-9]{0,4}$",
  "zahl5"=>"^\-[1-9][0-9]{0,4}$|^[1-9][0-9]{0,4}$",
  "zahl5n"=>"^\-[1-9][0-9]{0,4}$",
 )
);

Erklärung:
Am Amfang des Scriptes, z.B. ein Kontaktformular, wird die Funktion checkvars() aufgerufen,
übergeben werden 2 Arrays:
Array 1 : Das was überprüft werden soll, im Beispiel $_GET, also die Variablen die per URL
               übergeben werden.
Array 2 : Beinhaltet eine Liste mit zulässigen Variablen und den dazugehörigen Ausdruck.

Erläuterung des Beispiels:
Die Get-Variablen sollen überprüft werden.
Folgende Variablen dürfen übertragen werden:

$email  muß eine gültige Email-Adresse sein
$datum  muß im Format TT.MM.JJJJ sein
$text   kann Text, Zahlen und verschiedene Zeichen enthalten
$zahl5p muß eine Zahl zwischen von 1 bis 99999 sein
$zahl5  muß eine Zahl von -99999 bis -1 und 1 bis 99999 sein
$zahl5n muß eine Zahl von -1 bis -99999 sein

Die Funktion macht zwei Dinge:
1. Überprüfen ob die Variable erlaubt ist, wenn nicht, wird die mit 3 unset gelöscht.
2. Überprüfung der erlaubten Variablen auf korrekten Inhalt, wenn nicht, wird diese geleert.

Empfehlung:
Da der Aufruf mit $_GET, $_POST oder $GLOBALS durchgeführt werden,
empfiehlt es sich alle drei auszuführen.
(Weitere Tests ob z.B. nur ein ausführen mit $GLOBALS reicht, folgt in Kürze.

Hinweis:
Dieses Beispiel-Script unterstützt keine Arrays!
Beispiel: index.php?a[3]=test
News09.09.2010
C64-Emulator fürs iPhone fliegt wieder aus dem App Store
 
Apple hat den C64-Emulator für das iPhone wieder aus dem App Store genommen. Die Software war nur rund einen Tag verfügbar. Die Entwickler hoffen nun auf Nachsicht von Apple.
mehr...
News09.09.2010
Nüvi 1690: Navigationsgerät mit Internet in ganz Europa
 
Mit dem Nüvi 1690 zeigt Garmin das erste Navigationsgerät des Herstellers, das mit mobilem Internet ausgerüstet ist. Die Internetdienste vereint der Sammelbegriff Nülink. Im ersten Jahr kann das mobile Internet auf dem Nüvi 1690 i
mehr...
News09.09.2010
Nokia ohne eigenen Stand auf dem Mobile World Congress 2010
 
Am 15. Februar 2010 eröffnet die weltweit wichtigste Fachkonferenz rund um den Mobilfunk, der Mobile World Congress (MWC). Im kommenden Jahr wird Nokia als Marktführer für Mobiltelefone dort nicht mehr mit einem eigenen Stand vertreten sein
mehr...
mehr News
Weitere Infos
Programmierung
PHP,
MySQL,
HTML,
Javascript,
Programmierung für,
CMS,
Joomla,
usw.