Patrick: Session ID und Spam ID

Hallo,

wollte mal wissen ob es besser ist die Sessin ID jedem link anzuhängen oder es so zu machen??

session_start();
if (!session_is_registered('user'))
{
die "Du bist nicht eingeloggt";
}

Viele Seiten haben auch so ID hinter ihren links auch wenn man nicht angemeldet ist. was sind das für IDs? SpamIDs? Sollte man das so haben? Wenn ja wie geht das?

mfg,
Patrick

  1. Moin!

    wollte mal wissen ob es besser ist die Sessin ID jedem link anzuhängen oder es so zu machen??

    session_start();
    if (!session_is_registered('user'))
    {
    die "Du bist nicht eingeloggt";
    }

    Diese Frage kann man nicht beantworten, weil das eine mit dem anderen nichts zu tun hat.

    Wie die Session-ID zur nächsten Seite weitergetragen wird, ist nämlich ziemlich unabhängig davon, was passiert, wenn ein Benutzer nicht eingeloggt ist.

    Viele Seiten haben auch so ID hinter ihren links auch wenn man nicht angemeldet ist. was sind das für IDs? SpamIDs? Sollte man das so haben? Wenn ja wie geht das?

    SpamIDs sollte man ganz sicher _nicht_ haben.

    Wofür die IDs hinter dem Link sind, ist von außen nicht erkennbar. Das kann, wenn es immer dieselbe ID ist, durchaus eine Session-ID sein. Oder es ist irgendeine ID, die bestimmte Seiten abruft.

    Diese ID muß auch nicht am Ende der URL stehen, sie kann auch mitten im Pfadnamen stehen.

    Was wolltest du jetzt eigentlich wissen.

    - Sven Rautenberg

    --
    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
    1. Hallo

      ich hab das bis jetzt so gemacht wenn sich jemand einloggt:

      session_start();
      if (!session_is_registered('user'))
      {
      die "Du bist nicht eingeloggt";
      }

      die ID wird doch in einem Cookie gepeichert oder? Aber nicht jeder Akzeptiert diese. Wäre es besser diese ID dem Link anzuhängen?

      Habe auch einige mail formulare auf meiner seite. man brauch ja eigendlich nur immer die bestätigungsseite aktualisieren um diese vorherige mail nochmal zu schicken oder? also ist es leicht zu spamen. was kann ich dagegen machen??

      Mit freundlichen Grüssen,
      Patrick

      1. Moin!

        ich hab das bis jetzt so gemacht wenn sich jemand einloggt:

        session_start();

        session_start() sendet den Cookie, bzw. wenn trans_sid eingeschaltet ist, wird die Session-ID auch automatisch an alle Links gehängt und in alle Formulare reingeschrieben, wenn beim Seitenaufruf die Session-ID nicht per Cookie gesendet wurde. Ohne trans_sid müßtest du das manuell an alle Links dranhängen. Benutze dazu die Konstante "SID": <a href="link?<?php echo SID; ?>">...

        if (!session_is_registered('user'))
        {
        die "Du bist nicht eingeloggt";
        }

        Das prüft, ob in der Session die Variable 'user' registriert ist. Das hat mit dem Speichern von Cookies oder Session-IDs in der URL aber nichts zu tun.

        Außerdem wäre es netter, anstatt das Skript abzubrechen, doch lieber einen Redirect auf die Login-Seite zu machen.

        die ID wird doch in einem Cookie gepeichert oder? Aber nicht jeder Akzeptiert diese. Wäre es besser diese ID dem Link anzuhängen?

        trans_sid ist ein toller Mechanismus: Er versucht auf jeden Fall, ein Cookie zu setzen, hängt aber vorsorglich die Session-ID auch an alle Links dran. Du brauchst dich im Prinzip um nichts zu kümmern.

        Die Einstellung kann aber nur in der php.ini oder per .htaccess-Datei (sofern erlaubt) verändert werden. Du suchst dazu "session.use_trans_sid" (siehe auch http://www.php.net/manual/de/function.ini-set.php).

        Habe auch einige mail formulare auf meiner seite. man brauch ja eigendlich nur immer die bestätigungsseite aktualisieren um diese vorherige mail nochmal zu schicken oder? also ist es leicht zu spamen. was kann ich dagegen machen??

        Es ist nach meiner Erfahrung eine wirklich gute Idee, Formularverarbeitung zweizuteilen: Die Action des Formulars zeigt auf ein Skript, das die Arbeit macht. Und dann gibt dieses Skript einen Redirect (mit header()) aus, der auf eine Ergebnisseite leitet. Das _kann_ dasselbe Skript sein, das nur mit anderen Parametern aufgerufen wird, um den Erfolg zu vermelden.

        Das Resultat: Wenn man die Ergebnisseite neu lädt, wird eben die Seite neu geladen, aber nicht noch einmal die Arbeit neu getan.

        - Sven Rautenberg

        --
        ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
        1. Hallo

          Außerdem wäre es netter, anstatt das Skript abzubrechen, doch lieber einen Redirect auf die Login-Seite zu machen.

          Hast recht. Werde ich machen.

          trans_sid ist ein toller Mechanismus: Er versucht auf jeden Fall, ein Cookie zu setzen, hängt aber vorsorglich die Session-ID auch an alle Links dran. Du brauchst dich im Prinzip um nichts zu kümmern.

          Die Einstellung kann aber nur in der php.ini oder per .htaccess-Datei (sofern erlaubt) verändert werden. Du suchst dazu "session.use_trans_sid" (siehe auch http://www.php.net/manual/de/function.ini-set.php).

          wie kann ich denn diese einstellung ändern oder herrausfinden ob sie nicht schon aktiviert ist?? ändern muss es doch mein provider oder wie geht es mit .htaccess??

          Es ist nach meiner Erfahrung eine wirklich gute Idee, Formularverarbeitung zweizuteilen: Die Action des Formulars zeigt auf ein Skript, das die Arbeit macht. Und dann gibt dieses Skript einen Redirect (mit header()) aus, der auf eine Ergebnisseite leitet. Das _kann_ dasselbe Skript sein, das nur mit anderen Parametern aufgerufen wird, um den Erfolg zu vermelden.
          Das Resultat: Wenn man die Ergebnisseite neu lädt, wird eben die Seite neu geladen, aber nicht noch einmal die Arbeit neu getan.

          Ja das ist eine gute idee. danke!

          Mit freundlichen Grüssen,
          Patrick

          1. "session.use_trans_sid" (siehe auch http://www.php.net/manual/de/function.ini-set.php).
            wie kann ich denn diese einstellung ändern oder herrausfinden ob sie nicht schon aktiviert ist?? ändern muss es doch mein provider oder wie geht es mit .htaccess??

            Herausfinden kannst Du alles und jedes mit einem Aufruf von phpinfo(). Wie man die PHP-Einstellungen ändern kann, ist ausführlichst in der Anleitung beschrieben.

            Es ist nach meiner Erfahrung eine wirklich gute Idee, Formularverarbeitung zweizuteilen: Die Action des Formulars zeigt auf ein Skript, das die Arbeit macht. Und dann gibt dieses Skript einen Redirect (mit header()) aus, der auf eine Ergebnisseite leitet.

            Es sollte vielleicht der Vollständigkeit halber nicht unerwähnt bleiben, daß man dazu nicht irgendeine Weiterleitung benutzt, sondern diejenige, die für diesen Fall vorgesehen ist: 303.

            header("HTTP/1.0 303 See other");
              header("Location: http://example.com/bla");

            Siehe auch http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.4.

            Gruß,
              soenk.e

            1. Hallo,

              habe jetzt nachgeguckt und session.use_trans_sid steht auf 1. bei local value und master value!!!

              die session id bekomme ich mit link?<?php echo $PHPSESSID; ?> an meine links aber das wär ja sau arbeit das an alle links zu schreiben.

              geht das nicht anders??

              mfg,
              Patrick

          2. Moin!

            Die Einstellung kann aber nur in der php.ini oder per .htaccess-Datei (sofern erlaubt) verändert werden. Du suchst dazu "session.use_trans_sid" (siehe auch http://www.php.net/manual/de/function.ini-set.php).
            wie kann ich denn diese einstellung ändern oder herrausfinden ob sie nicht schon aktiviert ist?? ändern muss es doch mein provider oder wie geht es mit .htaccess??

            In einem Skript mit ini_get() - oder einfach aufgrund der Auswirkungen. Lösche alle Cookies, lasse dir das Setzen eines Cookies immer vom Browser bestätigen, und verneine ihn einfach. Wenn dann keine Session-IDs in der URL sind, ist die Einstellung aus.

            Per .htaccess sollte es eigentlich so gehen (am besten ins Hauptverzeichnis setzen):
            php_value session.use_trans_sid 1

            Wenn es nicht funktioniert, dann kriegst du einen "500 Internal Server Error". Kann auch sein, dass diese Art der PHP-Konfigurierung abgeschaltet ist, ohne dass es zu solchen krassen Fehlern kommt.

            - Sven Rautenberg

            --
            ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
            1. Hallo

              In einem Skript mit ini_get() - oder einfach aufgrund der Auswirkungen. Lösche alle Cookies, lasse dir das Setzen eines Cookies immer vom Browser bestätigen, und verneine ihn einfach. Wenn dann keine Session-IDs in der URL sind, ist die Einstellung aus.

              habe jetzt in meinem browser eingestellt das er keine cookies annehmen soll. jetzt kann ich mich garnicht mehr einloggen. warum?

              mfg,
              patrick

              1. Moin!

                habe jetzt in meinem browser eingestellt das er keine cookies annehmen soll. jetzt kann ich mich garnicht mehr einloggen. warum?

                Weil offenbar die Session-ID nur in Cookies gespeichert und nicht in der URL mitgeschleift wird.

                Meine Empfehlung: Benutze für so Cookie-Sachen zum Testen Opera. Der zeigt, wenn man es einstellt, das Cookie mit allen möglichen Informationen an und fragt nach, ob man es akzeptieren will oder nicht. Du kannst auf diese Weise genau sehen, was dein PHP-Skript für Cookies setzen will, und kannst ganz selektiv akzeptieren oder ablehnen und so sehen, was bei welcher Konstellation passiert.

                - Sven Rautenberg

                --
                ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
                1. Hallo

                  mein prob ist jetzt noch wenn sich ein user bei mir auf der seite anmeldet und sich dann nicht einloggen kann weil er keine cookies akzeptieren will.

                  was kann man da machen ohne viel arbeit.

                  Mit freundlichen Grüssen,
                  Patrick

                  1. Moin!

                    mein prob ist jetzt noch wenn sich ein user bei mir auf der seite anmeldet und sich dann nicht einloggen kann weil er keine cookies akzeptieren will.

                    was kann man da machen ohne viel arbeit.

                    _Ohne_ viel Arbeit geht nur das Einschalten von trans_sid (kann übrigens sein, dass dein PHP ohne diese Option kompiliert wurde und es deshalb trotz gesetzter Option nicht geht).

                    Und _mit_ viel Arbeit ist halt das Bearbeiten aller Links notwendig, die auf deine Seite zeigen.

                    - Sven Rautenberg

                    --
                    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
                    1. Hallo

                      _Ohne_ viel Arbeit geht nur das Einschalten von trans_sid (kann übrigens sein, dass dein PHP ohne diese Option kompiliert wurde und es deshalb trotz gesetzter Option nicht geht).

                      ja trans_sid ist bei local value auf 1 und bei master value auf 1. also ist dies funktion an. das bedeutet das hinter jedem link dann eine session id wär oder wie???

                      Mit freundlichen Grüssen,
                      Patrick

                      1. Moin!

                        ja trans_sid ist bei local value auf 1 und bei master value auf 1. also ist dies funktion an. das bedeutet das hinter jedem link dann eine session id wär oder wie???

                        Genau. Und wenn da keine ist, dann kann das einen von zwei Gründen haben:

                        1. Du schickst einen Session-Cookie mit.
                        2. Trans-SID funktioniert nicht.

                        - Sven Rautenberg

                        --
                        ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
                        1. Hallo

                          Genau. Und wenn da keine ist, dann kann das einen von zwei Gründen haben:

                          Ohne das ich was mache? also wäre das bei dem link <a href="index.php">Index</a> die session id dahinter??

                          1. Du schickst einen Session-Cookie mit.

                          ja ich mach es immer noch so:
                          session_start();
                          if (!session_is_registered('user'))
                          {
                          die "Du bist nicht eingeloggt";
                          }

                          Mit freundlichen Grüssen,
                          Patrick

                          1. Moin!

                            Genau. Und wenn da keine ist, dann kann das einen von zwei Gründen haben:
                            Ohne das ich was mache? also wäre das bei dem link <a href="index.php">Index</a> die session id dahinter??

                            Der Quellcode wird zu <a href="index.php?PHPSESSID=123455643454353">Index</a>,

                            1. Du schickst einen Session-Cookie mit.
                              ja ich mach es immer noch so:

                            Nein, ich meinte deinen Browser, der ein entsprechendes Cookie hat und sendet.

                            - Sven Rautenberg

                            --
                            ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
                            1. Hallo

                              Der Quellcode wird zu <a href="index.php?PHPSESSID=123455643454353">Index</a>,

                              das wäre ja echt das besste wenn das automatisch gehen würde. müsste ich ja nichts mehr machen.

                              könnte mein provider mir da weiterhelfen?

                              Nein, ich meinte deinen Browser, der ein entsprechendes Cookie hat und sendet.

                              achso jetzt hab ich verstanden

                              Mit freundlichen Grüssen,
                              Patrick

                              1. Moin!

                                Der Quellcode wird zu <a href="index.php?PHPSESSID=123455643454353">Index</a>,
                                das wäre ja echt das besste wenn das automatisch gehen würde. müsste ich ja nichts mehr machen.

                                könnte mein provider mir da weiterhelfen?

                                Mit Sicherheit. Einfach mal fragen, warum das trotz Einschaltung in der Konfig nicht funktioniert.

                                Wie gesagt: Man muß das beim Kompilieren von PHP extra aktivieren. Vielleicht hat der Provider es absichtlich rausgelassen.

                                - Sven Rautenberg

                                --
                                ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
                                1. Hallo

                                  Mit Sicherheit. Einfach mal fragen, warum das trotz Einschaltung in der Konfig nicht funktioniert.

                                  ja werde mal dann nachfragen.

                                  Wie gesagt: Man muß das beim Kompilieren von PHP extra aktivieren. Vielleicht hat der Provider es absichtlich rausgelassen.

                                  warum absichtlich? was könnten das für gründe haben?

                                  Mit freundlichen Grüssen,
                                  Patrick

                                  1. Moin!

                                    Wie gesagt: Man muß das beim Kompilieren von PHP extra aktivieren. Vielleicht hat der Provider es absichtlich rausgelassen.
                                    warum absichtlich? was könnten das für gründe haben?

                                    Die von dir ausgegebene Seite muß ja die Session-ID reinbekommen. Das erfordert zusätzliche Rechenleistung, die man vielleicht sparen wollte.

                                    - Sven Rautenberg

                                    --
                                    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|