aktuelle url auslesen
dobra
- perl
0 Alexander (HH)0 dobra
0 Patrick Andrieu0 dobra
Hallo,
Habe ein kleines Problem mit versehentlich (unwissentlich) weitergegebenen Session-IDs.
Bei meiner Shop-Software wird die Session-ID mit der url übergeben.
Das Problem: wenn ein eingeloggter Kunde einen Link mit seiner Session ID weitergibt (z.B. in einem Forum postet) und ein anderer klickt innerhalb der Timeoutzeit auf diesen Link, ist er als Kunde 1 eingeloggt und kann seine Daten einsehen und auch ändern.
Die Seiten werden normalerweise mit url?showSeitennummer,Session-ID aufgerufen.
(schaut in der HTML Vorlage z.B. so aus __xxpath__?show1200004810,__xxsession__ )
Mit url?logoffshowSeitennummer,Session-ID erreicht man die selbe Seite, ist aber AUSGELOGGT!
Meine Idee ist eine Abfrage, ob die Seite von meiner Adresse aus aufgerufen wurde:
<!--spmacro:module(session)
sub test {
my $out;
if ((! defined $ENV{HTTP_REFERER}) or ($ENV{HTTP_REFERER} !~ /.meine Adresse)) {
my $out = qq | <META HTTP-EQUIV="REFRESH" CONTENT="0; URL=http://Adresse mit logoffshow statt show"> |;
}
main::mprint print $out;
}
-->
Gibt es eine Möglichkeit mit Perl in der URL das "show" geben "logoffshow" auszutauschen?
Ich weiß schon, daß die $ENV{HTTP_REFERER} Abfrage nicht 100% sicher funktioniert, würde das Risiko das Kundendaten versehentlich einsehbar gemacht werden aber doch sicher sehr minimieren.
P.S.: mein Shop Support hat mit versprochen, daß sie sich diese Problematik bei der nächsten Version nochmal genauer ansehen werden.
So lange möchte ich aber nicht warten...
Kann mir jemand helfen?
Vielen Dank im Voraus
dobra
Moin Moin!
Du versuchst, dich auf den REFERER-Header zu verlassen, der notorisch unzuverlässig ist.
Speichere die Session-ID nicht in der URL, sondern in einem Cookie. So erhälst Du weitergebbare URLs, ohne Sessions versehentlich zu teilen.
Speichere in der Session die IP-Adresse der Gegenseite und ggf. die Browser-Kennung (REMOTE_ADDR und USER_AGENT), wenn die nicht übereinstimmen, verwerfe die Session. -- Kleiner Haken: Einige Provider routen Requests über verschiedene Proxies, so dass sich die REMOTE_ADDR von Request zu Request ändert. Lästig, aber nicht vermeidbar. Der HEader X_FORWARDED_FOR könnte in dem Fall helfen.
Alexander
Speichere die Session-ID nicht in der URL, sondern in einem Cookie.
Das kann ich leider nicht machen - in die Shop-Software kann ich nicht direkt eingreifen - nur mit Subroutinen eingreifen...
Speichere in der Session die IP-Adresse der Gegenseite und ggf. die Browser-Kennung (REMOTE_ADDR und USER_AGENT), wenn die nicht übereinstimmen, verwerfe die Session. -- Kleiner Haken: Einige Provider routen Requests über verschiedene Proxies, so dass sich die REMOTE_ADDR von Request zu Request ändert. Lästig, aber nicht vermeidbar. Der HEader X_FORWARDED_FOR könnte in dem Fall helfen.
Diesen Lösungsansatz habe ich wieder verworfen, da AOL-Kunden dann nicht mehr bestellen können.
Hallo dobra!
<!--spmacro:module(session)
sub test {
my $out;
if ((! defined $ENV{HTTP_REFERER}) or ($ENV{HTTP_REFERER} !~ /.meine Adresse)) {
my $out = qq | ... |
^^
»my« gehört hier nicht hin, die Deklaration hast Du schon weiter oben gemacht.
»|« als Delimiter für qq, qw, etc... würde ich vermeiden, da es für Pipes bei Programmaufrufen gebraucht wird, z.Beispiel open (MAIL, "|$MailProg ...") oder als »oder« in Regulären Ausdrucken $str =~ s/(foo|bar)/buz/g;
Gibt es eine Möglichkeit mit Perl in der URL das "show" geben "logoffshow" auszutauschen?
Reguläre Ausdrucke war eben das Stichwort:
my $out = "url?show...........";
$out =~ s/show/logoffshow/;
Viele Grüße aus Frankfurt/Main,
Patrick
Reguläre Ausdrucke war eben das Stichwort:
my $out = "url?show...........";
$out =~ s/show/logoffshow/;
Danke !
das funktioniert mal als "erste Notlösung" bis etwas besseres von der Shop-Software kommt
mfG aus Wien
dobra