Beat: Doppelte Variable in einer URL filtern

Beitrag lesen

Wo holst du diese URL mit Query String her?
Ich frage die URL mit $_SERVER['REQUEST_URI']; ab

Die Variablen werden im Moment noch mit $_GET ausgelesen, da man
dem Programm aber "fremde" Variablen untermogeln kann, versuche ich
dies zu verhindern. Sicher kommter der Einwand, dass ich das im Programm
machen sollte - was richtig ist. Ich möchte aber gerne aus der URL
alle später vorkommenden var1 entfernen und nur die erste var1 verwenden.

Das ist der falsche Ansatz.

Wenn du befürchtest, dass User auf deinem Skript Unfug betreiben wollen, dann musst du zuerst die URI durch PhP standardkonform in Komponenten zerlegen lassen. PhP stellt hier bequeme Zugriffe zur Verfügung.

Ich schreibe in Perl.
Ich habe eine Testroutine die alle einkommenden Parameter prüft auf deren Gültigkeit. Die zugehörigen Werte werden validiert. Wenn die Werte nicht valide sind, werden Defaultwerte gesetzt.

Das Prinzip dabei ist immer: Definiere was du willst. Versuche nie Dinge zu flicken, die du nicht willst.

foreach( keys %InHash ){
   /^name$/ and
          ( $InHash{name} =~ /[1]{2,24}$/ or $InHash{name} = 'invalid');
   /^age$/ and
          ( $InHash{age} =~ /^\d{1,3}$/ or $InHash{age} = 0);
}

Das ist jetzt simplifiziert. Tatsächlich verwalte ich Defaultwerte in einem hash, dessen Keys auch gleich bestimmen, was beim Auslesen überhaupt ein valider Inputkey sein darf.

Das klingt jetzt komplex und aufwändig, ist aber sauber, wenn die Anwendung wächst.

Damit ist Unfug unmöglich, und wenn jemand sich im Formular vertut, bekommt er dennoch einen sinnvollen Defaultwert verarbeitet, und keine lästigen Nachrichten.

Im weiteren muss ich leider passen und hoffe, dass dir ein PHP-Autor weiter hilft.

mfg Beat


  1. A-Za-z_- ↩︎