Gustl: timelocal - scriptabbruch bie falscher datumseingabe verhindern

Beitrag lesen

Guten Morgen. Es ist jetzt 00:20:23:44:17 UTC

Hallo.

wie kann ich den abbruch des scripts verhindern und eine vernünftig formatierte fehlermeldung mit eigenem print in den browser drucken ? mit software-error allein kann ein user ja nichts anfangen.

Du könntest den Fehler mit eval abfangen und anschließend die Variable $@ abfragen:

#!perl -w

use strict;
use Time::Local;

my $year = 107;
my $month = 13;
my $day = 65;

my $unix = eval { timelocal(59, 59, 23, $day, $month, $year) };

if($@) {
  print "Something went wrong: $@";
}
else {
  print "Everything is fine.";
}


>   
> Das sollte den erwünschten Effekt bringen.  
>   
> Schöne Grüße.  
  
Ohhh, so einfach ? Ja genau danach hab ich gesucht ! Hab gestern zwar vor meinem Posting hier eval überflogen, war aber wohl zu müde ums zu verstehen. Allerdings steht bei eval in selfhtml:  
  
Scripts wie im Beispiel oben können extrem gefährlich sein. Benutzen Sie so etwas niemals als öffentlich zugängliches CGI-Script! Denn der übergebene Code, den das Script vom Anwender erhält, wird gnadenlos ausgeführt. Wenn der Anwender jemand ist, der sich auskennt, kann er statt der geforderten Rechenoperation beispielsweise einen Aufruf von system übergeben, bei dem ein ganzer Verzeichnisbaum gelöscht oder die Festplatte formatiert wird...  
  
Ja das wird schon mal öffentlich zugänglich. Was kann ich da tun ? Bzw. trifft das überhaupt auf mich zu ? Die Variablen tag, monat, jahr die ich an eval (timelocal ...) übergebe hab ich vorher schon bereinigt, z.B: dürfens nur zahlen sein und ich filtere alle leerzeichen raus. Meine Kenntnisse gehen da nicht so tief, aber nach meinem Verständnis kann ein User dann einen derartigen Aufruf nur über die 3 Variablen schicken, und ein Sytemaufruf dieser Art kann nicht mur aus Zahlen bestehen. Lieg ich da richtig ?  
  
Grüssle Gustl