AlexBausW: Reloadsperre - Script funktioniert nicht

Beitrag lesen

Hallo Chrisman,

Gleich vorneweg als erstes: Wenn Du dem Browser nichts zurückgibst, bekommst Du imho immer einen 500er. Irgendwas steht dazu bestimmt auch im errorlog des Servers. Wenn Du wenigstens print "Content-Type: text/html\n\n<h1>Feddisch</h1>"; ausgibst, sollte der Server keinen Fehler melden.

Und nun will ich mich mal versuchen ;-)

#!/usr/bin/perl -w

^.....gibt dir alle Warnung auf STDERR aus

use strict; # hält dich dazu an, Deine Variablen sauber zu deklarieren,
            # bevor Du sie verwendest (mit my() bzw. local())

$query = $ENV{'QUERY_STRING'};
@data = split(/&/, $query);
for (@data)
  {
    ($key, $value) = split /=/;
    $value =~ s/%([a-fA-F0-9]{2})/pack("C", hex($1))/eg;
    $param{$key} = $value;
  }

Einfacher, und afaik mittlerweile bei jeder Perldistribution dabei:

use CGI ':standard';

$userinfo = $param{'id'};

^.......so ähnlich, aber nun param('id');

($id,$subcode) = split (/\_/, $userinfo);

[...]

open (IPDATEI, "<user/$id.ipdatei.txt") or die $!;

^...(1)           ^....(2)

(1) Das ist afaik nicht wirklich gut :-) Hier wird eine Usereingabe ohne Kontrolle, bzw. Bearbeitung mit open() auf das System losgelassen. Afaik sollte sowas unterbunden werden, damit es nicht zu unliebsamen Einbrüchen in Dein System kommen kann. Aber hier frags Du besser einen der Unix- bzw. CGI-Experten (*winkewinke* ;-).
(2) Ein potentieller Fehler sollte imho (und weil es so geschrieben steht ;-) immer abgefangen werden.
Hier könnte imho noch ein Dateilocking erfolgen, falls andere Prozesse auch schreibend mit der Datei agieren sollten.

[...]

close(IPDATEI) or die $!;

^.....(2)

$ip = $ENV{'HTTP_CLIENT_IP'};
if ($ip eq "") { $ip = $ENV{'REMOTE_ADDR'}; }

$ip = $ENV{'HTTP_CLIENT_IP'} $ENV{'REMOTE_ADDR'};

Das ist imho perliger, da hier die Shortcircuit-Eigenschaft und der Vorrang des logischen Operators ausgenutzt werden. D.h. Evaluierung von links nach rechts, und nur wenn es wirklich noch nötig ist.

[Rest nur grob überflogen (das ',' muss afaik nicht maskiert werden) :-)]

Ich hoffe das hilft Dir weiter (vor allem die Ausgabe an den Browser ;-)

Gruß AlexBausW

Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html