Frank (no reg): erste eigene PHP Seite ;)

Servus,

also Seite nicht Site ;)

Als eigentlich fundamentaler Anti-PHPler / Anti-MySQLler habe ich es doch glatt geschafft einen Formmailer schnell selbst in 2 Std. zu basteln, der sogar funktioniert.

Ich würde da jetzt gern noch etwas mehr SPAM-Schutz einbauen, was bietet sich da im Einzelnen an?

htmlspecialchars und striptags sind bereits angewendet.

Danke für Input :)
Frank

  1. Hello,

    Ich würde da jetzt gern noch etwas mehr SPAM-Schutz einbauen, was bietet sich da im Einzelnen an?

    htmlspecialchars und striptags sind bereits angewendet.

    Viel wichtiger ist die Headerkontrolle.
    Alle Daten, die da Einzug halten sollen, müssen doppelt und dreifach geprüft werden.

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

    1. Hi Tom.

      Wie meinst du das? Header-Kontrolle?

      Ciao, bis später,
      Frank

      1. Hi,

        Wie meinst du das? Header-Kontrolle?

        es ist beliebt, in z.B. das Subject-Eingabefeld den Text "blablub
        To: armes-opfer@example.com" einzutragen. Ja, mit Umbruch.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hi,
          aha, soll das heissen, dass bei

            
          $mail_sub = "blablub\n  
          To: armes-opfer@example.com";  
          $mail_mesg = "Hallo armes-opfer!";  
          mail("meinempfaenger@example.com", $mail_sub, $mail_mesg, "From: meinabsender@example.com");  
          
          

          auch eine Mail an armes-opfer@example.com geschickt würde?

          Abender, Empfänger, Subject und extra Headers sind statisch vom "Programm" fix gesetzt. Aus dem gesendeten Message Text sowie den Eingaben für Name, Ort, Adresse etc wird dann ein HTML Fragment generiert:

            
          $mail_mesg = "<ul><li>Name: ".$_POST["cName_txt"]."</li>";  
          $mail_mesg .= "<li>Vorname: ".$_POST["cVorname_txt"]."</li>";  
          // und so weiter  
          $mail_mesg .= "<li>Land: ".$_POST["cLand_txt"]."</li></ul>";  
          
          

          HTML und PHP in der Message ignoriere ich absichtlich, es ist unwahrscheinlich und ungewünscht, dass der Benutzer solche Eingaben machen soll (ist nur ein "einfaches" Kontaktformular).

          Mit anderen Worten, ich sollte nur praktisch jedes Feld mittels Regex auf zugelassenen Inhalt prüfen?

          Grüsse und Dank für eure Hilfe,
          Frank

          1. Hi,

            aha, soll das heissen, dass bei [...]
            auch eine Mail an armes-opfer@example.com geschickt würde?

            das möchte ich jetzt speziell nicht beschwören. Potenziell existiert dieses Problem jedoch bei allen Header-Angaben.

            Abender, Empfänger, Subject und extra Headers sind statisch vom "Programm" fix gesetzt.

            Das reduziert die Probleme :-)

            Mit anderen Worten, ich sollte nur praktisch jedes Feld mittels Regex auf zugelassenen Inhalt prüfen?

            Das solltest Du. Wenn allerdings jede Benutzereingabe im Body der Mail landet, ist das große Problem des Spam-Versandes aber IMHO schon mal gelöst: Hierzu müsste der Angreifer den Header beeinflussen können.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
          2. Hallo,

            aha, soll das heissen, dass bei

            $mail_sub = "blablub\n
            To: armes-opfer@example.com";
            $mail_mesg = "Hallo armes-opfer!";
            mail("meinempfaenger@example.com", $mail_sub, $mail_mesg, "From: meinabsender@example.com");

            
            >   
            > auch eine Mail an armes-opfer@example.com geschickt würde?  
              
            genau das. Und fertig ist die Spamschleuder. ;-)  
              
            
            > Abender, Empfänger, Subject und extra Headers sind statisch vom "Programm" fix gesetzt.  
              
            Das ist gut, dann kann dir da schon nichts mehr passieren. Schlimmstenfalls könnte dir jemand mit unsinnigen Eingaben noch den Nachrichtentext verunstalten; das hätte aber keine schädlichen Auswirkungen, außer dass beim Empfänger möglicherweise irgendein wüster Zeichensalat ankommt.  
              
            
            > Mit anderen Worten, ich sollte nur praktisch jedes Feld mittels Regex auf zugelassenen Inhalt prüfen?  
              
            Nein. Aber du solltest jede Benutzereingabe, jede Eingabe, die irgendwie von außen kommt, sorgfältig prüfen, kritische Inhalte abweisen oder dem Kontext entsprechend maskieren. "Jedes" Feld zu prüfen, ist in der Regel nicht notwendig, wenn -wie in deinem Beispiel- einige Felder sowieso von Programm mit Konstanten belegt werden.  
              
            So long,  
             Martin  
            
            -- 
            Ich liebe Politiker auf Wahlplakaten.  
            Sie sind tragbar, geräuschlos, und leicht wieder zu entfernen.  
              (Loriot, deutscher Satiriker)
            
            1. Danke euch allen,

              dann hab ich ja schon mal halbwegs dem Spam einen Riegel vorgeschoben.

              Was mich noch ein wenig stört, ist die Möglichkeit, dass ein Bot ja das Formular tausendmale hintereinander abschicken könnte. Ich prüfe momentan schon den HTTP-Refererrer, aber bekanntlich kann man diesen ja auch faken.

              Was empfiehlt sich denn da zur Beschränkung des Formularabsendens PHP-seitig noch?

              • Eintrag der Client IP in eine Sperrtabelle und Überprüfung von dem Mailsenden ob vom selben Client in den letzten x Minuten schon mal das Formular abgesendet worden ist?

              • Einen (bayesischen) Filter für die gesendeten Daten (so à la Rechtschreibprüfung vom SELFHTML Forum), der dann Einträge mit 90% Spam-Charakter aussortiert?

              • Captchas ... hmm, das könnte imho potentielle Interessenten abschrecken, darum würde ich sowas nur ungern einsetzen

              • Nochmaliges anzeigen und bestätigen lassen der gesendeten Daten

              • Für Bots verwirrende nicht sichtbare Eingabefelder à la <input type="checkbox" name="IAmASpammer" value="YesIAm" />

              Die Website samt Formular ist für eine gute Freundin, die leider, was Computer, Internet und so weiter angeht, nicht sonderlich begabt ist. Ich möchte sie ein wenig vor Spam über ihre Website schützen.

              Wenn ich mit der Seite fertig bin (Ende der Woche), würde ich sie gern mal hier zur Beurteilung stellen. :)

              Grüsse
              Frank

              1. Hallo Frank!

                • Für Bots verwirrende nicht sichtbare Eingabefelder à la <input type="checkbox" name="IAmASpammer" value="YesIAm" />

                Vielleicht interessant für Dich: http://forum.de.selfhtml.org/archiv/2007/7/t155557/#m1012512 (auch die Frage von Ingo).

                Viele Grüße aus Frankfurt/Main,
                Patrick

                --

                _ - jenseits vom delirium - _
                [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                Nichts ist unmöglich? Doch!
                Heute schon gegökt?
                1. Hallo,

                  ich schütze mein Gästebuch und Kontaktformular mit Bayesschen Filtern, das funktioniert mit der Zeit recht zuverlässig, bin sehr zufrieden:

                  http://nasauber.de/programme/b8/

                  Grüße,
                  Till

              2. Hallo,

                Die Website samt Formular ist für eine gute Freundin, [...]
                Wenn ich mit der Seite fertig bin (Ende der Woche), würde ich sie gern mal hier zur Beurteilung stellen. :)

                wen? Die Freundin? Nur zu!  ;-)
                Hach, ich liebe es, wenn man einen Satz so herrlich missverstehen kann ...

                *scnr*
                 Martin

                --
                Die letzten Worte der Challenger-Crew:
                Lasst doch mal die Frau ans Steuer!
  2. Hallo Frank,

    Ich würde da jetzt gern noch etwas mehr SPAM-Schutz einbauen, was bietet sich da im Einzelnen an?

    Verschiedenes, z.B. den Formular-Elementen möglichst kryptische namen zu geben, sodass ein Bot nicht weiß, was er wo eitragen soll, die Eingaben auf Korrektheit überprüfen (sowieso), Captchas im absoluten Notfall. Google mal oder such im Archiv, es git sehr viele Methoden.

    htmlspecialchars und striptags sind bereits angewendet.

    Ui, und was ist wenn ich dir über Kontaktformular sagen will, dass dein <html>-Tag falsch positioniert ist. Das wird der aus dem Text "rausgestript" und du wunderst dich, warum der "-Tag" falsch sein soll. striptags ist also unsinn, wenn du htmlspecialchars benutzt, was auch nur nötig und sinnvoll ist, wenn die Mail im HTML-Format verschickt wird. Ansonsten wird z.B. aus dem netten Smiley ":-<" plötzlich ":-&lt;", was du auch nicht willst.

    Also immer ordentlich und nur da maskieren wo es sinnvoll ist, sonst nicht. Andererseits es aber auch nirgendwo vergessen, wo es nötig ist.

    Jonathan