dobra: aktuelle url auslesen

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

  1. 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

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
    1. 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.

  2. 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

    --

    _ - jenseits vom delirium - _
    [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
    Nichts ist unmöglich? Doch!
    Heute schon gegökt?
    1. 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