speedy: Sessionmanagement mit Perl

Hallo Forum,

ich arbeite zur Zeit an einem umfangreichen Redaktions-CGI-Skript. Nun moechte ich einem Benutzer die Moeglichkeit bieten, sich einmal anzumelden und dann Aktionen (Eingabe, Loeschen etc.) ausfuehren zu koennen. Normalerweise wuerde ich seine IP speichern und ein Zeitfenster festlegen in der diese IP Aktionen ausfuehren darf.

Leider dauert eine Eingabe auf CLientseite i.d.R. etwas laenger, sodass es beim Einsatz von Proxyservern im Unternehmensnetzwerk zum Timeout kommen kann und beim Absenden der Eingabe der Proxy sich unter einer _anderen_ IP wieder einwaehlt.

Wie kann ich nun ein sicheres Sessionmanagement erreichen, das waehrend einer Session auch unterschiedliche IPs erlaubt?

Viele Gruesse und fuer jede Hilfe dankbar
  speedy

PS: das Skript ist in PERL geschrieben!

  1. hi!

    Wie kann ich nun ein sicheres Sessionmanagement erreichen, das
    waehrend einer Session auch unterschiedliche IPs erlaubt?

    Du könntest zb. eine zufällige Session-ID erzeugen (zb. in abhängig
    von der Uhrzeit des Einloggens) und diese bei allen Skripts mit als
    Parameter übergeben (entweder durch direkten Aufruf oder als hidden-
    Feld in Formularen). Anhand dieser eindeutigen ID kannst du dann
    erkennen, welcher Benutzer gerade mit deinem Skript redet.

    bye, Frank!

    1. Hi,

      Du könntest zb. eine zufällige Session-ID erzeugen

      ja, an diese Moeglichkeit dachte ich auch schon. Die ID muesste dazu dann in einer Datei gespeichert sein und nach einem Session-Timeout geloescht werden.

      Kann ich diesen Parameter (z.B. id=653246) irgendwie generell an die Seiten hinhaengen, oder muss ich ihn bei allen relevanten Links (also die die das Skript steuern) und Formularen mit einbinden?

      Vielen Dank und Gruesse
      speedy

      1. Kann ich diesen Parameter (z.B. id=653246) irgendwie generell an die Seiten hinhaengen, oder muss ich ihn bei allen relevanten Links (also die die das Skript steuern) und Formularen mit einbinden?

        Ja, siehe dazu meine Antworten: Es gibt eine *unglaublich* clevere Methode. Koennte von mir sein ;-)

        Peter

  2. Wie kann ich nun ein sicheres Sessionmanagement erreichen, das waehrend einer Session auch unterschiedliche IPs erlaubt?

    Es gibt eine sehr nette Methode (die aber wohl durch ein Patent geschuetzt ist): Hier wird der Hostname als SessionID benutzt. Das setzt einen wildcard-Eintrag im DNS und einen entsprechend konfigurierten virtuellen Server voraus und den Vorteil, dass bei Verwendung von relativen Links der Browser dafuer sorgt, dass die SessionID durchgeschleift wird.

    Peter

    1. Hi,

      Es gibt eine sehr nette Methode (die aber wohl durch ein Patent geschuetzt ist): Hier wird der
      Hostname als SessionID benutzt.

      Diese Methode ist mehr als anfällig. Bei einem Connection-Timeout und einer Neu-Anwahl ist der
      Hostname des Users uU ein anderer.
      Nein, sicher ist wohl wirklich nur die von Frank beschriebene Methode: eine ID erstellen aus z. B. IP &
      Zeitpunkt des einloggens, diese registrieren (z. B. in einer Datei oder einer MySQL-DB) und in jedem
      Script mitschleifen. So bleibt der User immer eindeutig identifizierbar.

      mfg
      CK1

      <img src="http://wwwtech.de/images/banner.jpg" alt="">
      http://wwwtech.de/
      http://wwwtech.de/moorhuhn/

      1. Diese Methode ist mehr als anfällig. Bei einem Connection-Timeout und einer Neu-Anwahl ist der
        Hostname des Users uU ein anderer.

        Ja, aber das meinte ich nicht (ich habe mich zu knapp ausgedrueckt). Nicht der Hostname des Benutzers wird als SessionID benutzt, sondern der des Server. Kommt ein Benutzer ueber die Startseite (oder wo auch immer die SessionID vergeben werden soll), wird er auf eine Seite

        sessionid.meinserver/xyz

        weitergeleitet.

        Peter

  3. Hallo Forum,

    ich arbeite zur Zeit an einem umfangreichen Redaktions-CGI-Skript. Nun moechte ich einem Benutzer die Moeglichkeit bieten, sich einmal anzumelden und dann Aktionen (Eingabe, Loeschen etc.) ausfuehren zu koennen. Normalerweise wuerde ich seine IP speichern und ein Zeitfenster festlegen in der diese IP Aktionen ausfuehren darf.

    Leider dauert eine Eingabe auf CLientseite i.d.R. etwas laenger, sodass es beim Einsatz von Proxyservern im Unternehmensnetzwerk zum Timeout kommen kann und beim Absenden der Eingabe der Proxy sich unter einer _anderen_ IP wieder einwaehlt.

    Wie kann ich nun ein sicheres Sessionmanagement erreichen, das waehrend einer Session auch unterschiedliche IPs erlaubt?

    ich hab fuer genau sowas ein Perlmodul geschrieben.
    Das Perlmodul arbeitet sowohl mit einer Timeout-Option,
    als auch mit SHA. Es ist dadurch auch recht sicherer gegenueber
    das Ausspaehen einer Session-ID und Nutzen dieser
    durch anderen, die diese ueber den HTTOP_REFERER
    zu sehen bekommen.

    Schau es dir mal an:
    http://cgi.xwolf.com/freecode/UserSID.pm
    http://cgi.xwolf.com/cgilocal/autoindex.cgi?path=freecode&load=UserSID-test.pl&type=application/pl

    Ciao,
      Wolfgang

    1. Hi,

      danke, das Modul werd ich mir mal näher ansehen. Ist ja schon ganz schön mächtig!

      das Ausspaehen einer Session-ID und Nutzen dieser
      durch anderen, die diese ueber den HTTOP_REFERER
      zu sehen bekommen.

      wie sollte das gehen? Kann ich mir jetzt nicht vorstellen.

      Grüsse
      speedy

      1. Hallo

        wie sollte das gehen? Kann ich mir jetzt nicht vorstellen.

        Ein User klickt auf deiner Seite http://blabla.de/sessionid=123 auf einen Link. Im Logfile des nun angesurften Servers erscheint dann obige URL. Ich halte es zwar fuer nahezu ausgeschlossen, aber theoretisch koennte nun jemand, der nichts anderes zu tun hat, alle halbe Minute sein Logfile downloaden, nach solchen IDs gucken und sich dann mit dieser ID in den geschuetzten Bereich deines Servers begeben.

        Ich glaube aber, dass niemand so bloede ist, den ganzen Tag nur darauf zu warten, dass moeglicherweise evtl. mal so ein Link im Logfile auftaucht. Und wenn es mal passiert, was kann er schon machen? Jedenfalls in den seltensten Faellen etwas, das ihm etwas bringt. Hoechstens Aerger fuer den Geschaedigten. Aber macht man sich deswegen so eine Muehe?

        MfG
        Thomas

        1. Hi,

          Ich glaube aber, dass niemand so bloede ist, den ganzen Tag nur darauf zu warten, dass moeglicherweise evtl. mal so ein Link im Logfile auftaucht.

          äh, und was ist, wenn ich das mit einem cronjob mache?
          Wenn ich an meine logs komme, ist die Wahrscheinlichkeit, daß ich auch cron darf, nicht sooo klein.

          Aber macht man sich deswegen so eine Muehe?

          Die Beweggründe derjenigen zu hinterfragen, die auf diese Weise Ärger verursachen wollen, steht mir nicht zu.
          Die Beweggründe derjenigen, die gegen solchen Ärger vorbeugen möchten, liegen auf der Hand: Man macht sich die Mühe, solche Zugriffe zu verhindern, wenn die Versicherungsprämie (der Aufwand zur Vorbeugung) niedriger ist als der zu befürchtende Schaden.

          mfG - Michael

          1. HAllo

            äh, und was ist, wenn ich das mit einem cronjob mache?
            Wenn ich an meine logs komme, ist die Wahrscheinlichkeit, daß ich auch cron darf, nicht sooo klein.

            Und dann? Was schaetzt du, wieviel Promille aller Zugriffe solche IDs enthalten? Evtl. einer von einer Million?
            Und dann muss man immer noch rechtzeitig die ID nutzen, bevor sie verfaellt.
            Missbrauch ist in etwa so wahrscheinlich wie ein Lottogewinn oder dass Stratos Server 24h am Stueck online sind.

            MfG
            Thomas