Guma: Mehrmaliges Versenden eines Formulares durch Sessions verhindern

Hallo und guten Abend, ich will mehrmaliges Versenden eines Formulares durch Sessions verhindern. Das Formular sollte pro IP nur einmal versendbar sein. Ich will damit verhindern, dass sich jemand mehrfach einträgt (immer noch mein Newsletter) oder spammen will. So würde ich es umsetzen: session starten, session-variable setzen und beim Versenden prüfen, ob variable schon gesetzt wurde, sonst DIE.

Eine andere Möglichkeit:
mit php und mysql die jeweilige ip in eine db schreiben, alles die älter sind als z.B. 2 h wieder löschen. Beim Versenden abfragen, ob  ip schon gespeichert wurde. Wenn jan dann DIE.

Welche Lösung seht ihr als logisch besser an. Die erste würde ich aufgrund der schnellen einfachen Umsezung ohne Datenbank bevorzugen.

Grüße von Guma!

  1. hi,

    Hallo und guten Abend, ich will mehrmaliges Versenden eines Formulares durch Sessions verhindern.

    Das geht nicht.

    Das Formular sollte pro IP nur einmal versendbar sein.

    Auch das geht nicht.

    Ich will damit verhindern, dass sich jemand mehrfach einträgt (immer noch mein Newsletter) oder spammen will.

    Aha, also willst dugar nicht unbedingt das Versenden unterbinden - sondern die _Verarbeitung_, wenn erkannt wurde, dass identische Daten vom gleichen Nutzer/Client mehr als einmal gesendet wurden.

    So würde ich es umsetzen: session starten, session-variable setzen und beim Versenden prüfen, ob variable schon gesetzt wurde, sonst DIE.

    Meinst du vielleicht "dann" statt "sonst"?

    Eine andere Möglichkeit:
    mit php und mysql die jeweilige ip in eine db schreiben, alles die älter sind als z.B. 2 h wieder löschen. Beim Versenden abfragen, ob  ip schon gespeichert wurde.

    Ach nein, bitte den nicht "IP speichern"-Quatsch.

    Welche Lösung seht ihr als logisch besser an.

    Eindeutigen Token generieren, und bei Verarbeitung prüfen, ob dieser schon "benutzt" wurde.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. hi wahsaga,

      Eindeutigen Token generieren, und bei Verarbeitung prüfen, ob dieser schon "benutzt" wurde.

      OK, ich werde es so versuchen:

      • ich generiere eine eindeutige Zeichenkette bzw. Token.
      • diese wird beim Anzeigen des Formulars generiert und als HIDDEN-Formularelement hinterlegt
      • beim Abschicken speichere ich es in einer Session
      • Sendet der User das Formular erneut ab, wird ebenfalls der Token mitgeschickt.

      Durch eine Überprüfung, ob dieser mitgelieferte Token bereits in der Session existiert, stelle ich fest, ob die Daten bereits per Formular übermittelt wurden.

      Zur Generierung des Tokens verwende ich md5(uniqid(time()));

      <?php
      session_start();
      $my_token = md5(uniqid(time()));
      //das dann ein ein hidden feld
      <input type="hidden" name="token" value="${my_token}" />
      //...Nun prüfen, ob dieser Token als Sessionvariable bereits existiert.

      //wenn ja 0> DIE
      //wenn nein=> wird die Sessionvariable gesetzt:

      $my_post_token = $_POST['token'];
      if ( isset($_SESSION['mytoken'][$my_post_token]) ) {
          echo "Formular wurde bereits versandt!";
          exit;
      } else {
          $_SESSION['mytoken'][$my_post_token] = true;
      }

      Frage: Der Nutzer muss zwingend Session-Cookies im Browser aktiviert haben sonst gehts nicht.

      Wie gehe ich besser vor? Gibts Optimierungsvorschläge? Grüße von Guma

  2. Hallo Guma,

    Wahsaga hat ja schon ein bisschen ueber die serverseitigen Aspekte geschrieben. Diese im Hinterkopf kannst Du auch den Absendebutton im Formular via Javascript auf disabled setzen. Das bildet natuerlich keinen zuverlaessigen Schutz, duerfte aber das 2x Abschicken in den meisten Faellen erstmal verhindern.

    Gruß,

    Dieter

    1. Danke Dieter,
      das habe ich bereits berücksichtigt, das sperrt die nervösen Zeigefinger aus, bremst aber  Spammer mit Dauerfeuer aufs Formular nicht aus, die versuchen massenhaft Mails darüber zu fahren.

      Grüße von Guma

      1. Wechseln Spammer eigentlich ihre IP millisekündlich oder muss ich mir da keine Sorgen machen, wenn ich z.B. eine IP für zwei Stunden nach erfolgtem Versand sperre? Grüße von Guma

        1. hi,

          Wechseln Spammer eigentlich ihre IP millisekündlich oder muss ich mir da keine Sorgen machen, wenn ich z.B. eine IP für zwei Stunden nach erfolgtem Versand sperre?

          Ja, tun sie [1], und ja, solltest du [2].

          [1] Spammer nutzen idR. Bot-Netze, die Anfragen können also in kurzem Zeitraum von vollkommen verschiedenen Rechnern kommen.

          [2] Nein, eine "IP-Sperre" ist wie schon gesagt reichlich unsinnig - da z.B. zahlreiche Nutzer die gleiche (öffentliche) IP haben können (Firmennetze, AOL-Proxies, ...)

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
          1. Spammer wechseln ihre IP millisekündlich »»
            Ja, tun sie [1], und ja, solltest du [2].

            Die Spammer sind aber echt penetrantisch veranlagt.

            Ich könnte Setze doch einfach eine Session-Variable anlegen. Beim ersten abschicken wird diese auf false gesetzt und beim erneuten erneute abschicken geprüft. Das reicht dann auch nicht!

            Zudem ein Hidden-Feld per CSS, das ich prüfe ob es leer bleibt baue ich mit ein. Spammer nutzen meisst alle Formularfelder und füllen auch ein nicht sichbares. So kann ich differenziern.

            [2] Nein, eine "IP-Sperre" ist unsinnig - da z.B. zahlreiche Nutzer die gleiche (öffentliche) IP haben können (Firmennetze, AOL-Proxies, ...)

            Ich will aber vermeiden, dass von einem PC mehrfach versendet werden kann. Wie gehe ich denn jetzt vor. Bin total verunsichert. Guma

            1. Hi,

              Ich will aber vermeiden, dass von einem PC mehrfach versendet werden kann. Wie gehe ich denn jetzt vor. Bin total verunsichert. Guma

              Captcha wären schon mal ein Anfang.
              Dann noch eine Menge Sachen/Kombis (session, cookies, js, etc...) die
              normale User nicht so leicht aushebeln.

              Aber gegen Profis helfen im Moment nur captcha, solange
              das maschinelle spammer sind.

              carpe diem
              Pia

              1. hi,

                Aber gegen Profis helfen im Moment nur captcha, solange
                das maschinelle spammer sind.

                Die "helfen" erstens auch gegen normale Benutzer (alles andere als barrierefrei) - und zweitens gegen die "Profis" auch oftmals nicht mehr, weil die menschliche Helfer hinzunehmen (ohne dass diese das bemerken würden).

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }
                1. Hallo Wahsager,

                  Die "helfen" erstens auch gegen normale Benutzer (alles andere als barrierefrei) - und zweitens gegen die "Profis" auch oftmals nicht mehr, weil die menschliche Helfer hinzunehmen (ohne dass diese das bemerken würden).

                  die sind ja wirklich böse und so schlimm diese Spammer. Die nutzen auch noch unwissende zu deren Zwecken. Pfui! Ich werde bestimmt davon träumen, wie eine spammaschine mich einnimmt und verspeisst. mir wird schlecht. würg!

                  Schöne Träume wünscht euch Guma.

                2. hey wahsager kannst du mir verraten, wie ich dann noch die Absender-Mail validiere um zu verhindern, dass diese unvalidiert ins mail() schreibt (cc'/bcc's)

                  Ich will vor allem prüfen, ob Zeilenumbrueche in der Absender-Email stecken. Wie genau prüfe ich das? Warte mal ab, evtl entsteht heute Nacht das sicherste Formular in Deutschland. *grins*

                  Grüße von Guma

              2. Hey,

                guter zeitpunkt um mich mal selber zu zitieren.

                captchas in die tonne ;)

                Tschö

                1. Hi,

                  guter zeitpunkt um mich mal selber zu zitieren.

                  lol, auf sowas muss man erst mal kommen.
                  Danke für den Hinweis, sperre meine captcha jetzt auch noch mit
                  einer Zeitbegrenzung.

                  carpe noctem
                  Pia

      2. Hallo Guma,

        Spammer mit Dauerfeuer aufs Formular nicht aus, die versuchen massenhaft Mails darüber zu fahren.

        Das gewiss nicht. Es gibst im Archiv aber etliche Postings, die sich mit mehr oder weniger wirksamen Spamabwehren befassen. Aber das weisst du vermutlich ebenfalls.

        Gruß,

        Dieter