Das ist nicht die Frage. Das CGI Modul gibt dir böse Rohdaten.
In Perl gibt es genau einen Standardprozess, wie du Userdaten untaintest.Das Prinzip ist
$InputRohdaten{feld1} =~ /(x|y|z)/ and $InputUntainted{feld1} = $1;Das ist der einzige Weg, Userinput zu untainten.
Um das etwas zu rationalisieren:
foreach( %InputRohdaten ){
/^feld1$/
and $InputRohdaten{$_} =~ /(x|y|z)/
and $InputUntainted{$_} = $1
and next;
/^feld2$/
and $InputRohdaten{$_} =~ /(\d{1,3})/
and $InputUntainted{$_} = $1
and next;
/^feld3$/ and
$InputRohdaten{$_} =~ /([\w-]{10,32})/
and $InputUntainted{$_} = $1
and next;
}
%InputRohdaten = (); # brauchen wir nicht mehr...
So etwas habe ich noch in keinem der angebotenen Kontakt- oder Gästebuchformular-Perl-Programmen gesehen.
Ich verstehe auch leider das obige Konstrukt überhaupt nicht.
Ich prüfe gezielt jedes einzelne Feld ob formal richtig (z.B. numerisch, alphanumerisch etc.) und dann noch auf Plausibilität, gegenseitige Abhängigkeiten etc.
Der Programmumfang ist die Summe der Ressourcen.
Mehr Komplexität, mehr Chaos, schlechteres Debugging.
In meinem 5500++ Zeilenprogramm habe ich gerade mal 10 Zeilen Code für Errormessages, die zudem nie innerhalb des letzten Jahres ausgeführt wurden.
Das sollte dir etwas sagen. Musst du Errormessages ausgeben, machst du etwas falsch.
Auch das ist mir unklar. Für jede fehlerhafte Benutzereingabe gebe ich möglichst gezielt eine Fehlermeldung aus. D.h. zu einem Eingabefeld gibt es mehrere mögliche Fehlermeldungen. Aber selbst wenn ich für alle Fehler nur eine Meldung ausgeben würde "Irgendetwas ist falsch", so gehe ich davon aus, dass innerhalb eines Jahres diese mehrfach ausgegeben würde, es sei denn ich hätte keine Besucher auf meiner Homepage.
Gruß
Pensky