Schutz vor Spamversand - geht,s auch einfacher?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Schutz vor Spamversand - geht,s auch einfacher?

    Hallo Leute,

    ich möchte für meine Webseite ein Kontaktformular erstellen - und das natürlich möglichst Spamsicher.

    Nun habe ich mich im Netz umgeschaut und die abenteuerlichsten Vorschläge und zahlreiche komplizierte
    Funktionen und Klassen gefunden - die ich nicht einmal annähernd kapiere...

    Geht es nicht auch einfacher???

    Ich stelle es mir so vor:

    Kontaktformular in 2 Teilen
    --------------------------


    Teil 1:

    Formular mit den Feldern

    Name
    - erlaubte Zeichen: a-z, Punkt, Bindestrich - max. 50 Zeichen erlaubt

    Betreff
    - erlaubte Zeichen: a-z, 0-9 und ?!-,.: - max. 50 Zeichen erlaubt

    Mailtext
    - erlaubte Zeichen: a-z, 0-9, und ?!-,.: - max 1000 Zeichen erlaubt

    eMail-Adresse
    - erlaubt sind nur typische Zeichen. - max. 80 Zeichen erlaubt

    Als zusätzlicher Schutz eine kleine Rechenaufgabe z.B. 10 x 10 =
    Die Lösung ( in diesem Fall 100) trägt der Besucher in das danebenstehende Feld ein.
    Das Ergebnis wird - zusammen mit der IP-Nummer - in einer Datenbank gespeichert.


    Teil2:

    Nach Absenden des Formulars wird im zweiten Teil des Formulars genaustens geprüft ob tatsächlich
    nur die erlaubten Zeichen und die maximal erlaubte Anzahl Zeichen gesendet wurden,
    alles andere ergibt Fehlermeldungen.

    Das Ergebnis der Rechenaufgabe sowie die IP-Nummer werden aus der Datenbank geholt und
    mit dem Ergebnis des Besuchers verglichen.

    Bei - sagen wir mal - 6 Fehlversuchen wird die IP-Nummer gesperrt.

    Aus sämtlichen Feldern des Formulars werden zudem Zeichenfolgen wie:
    content-type:, mime-version:, bcc:, cc:, to:, from:
    entweder gelöscht oder es erfolgt eine Fehlermeldung.

    Ist alles in Ordnung wird das Formular gesendet.

    Ist es jetzt noch möglich, über dieses Formular Spammails, z. B. über
    Spambots, zu versenden? Worauf ist noch zu achten?


    Grüsse
    Cosinus
    Zuletzt geändert von cosinus; 04.05.2010, 00:27.
    Wer mein jemand zu sein,
    hört auf jemand zu werden...!

  • #2
    Hallo,

    klingt schon mal nicht schlecht. Alle Angaben, die im Header der Mail auftauchen sollen, solltest du zusätzlich zu deinem Header-Test auch auf Zeilenumbrüche untersuchen. Wenn du die Rechenaufgaben mit Zahlwörtern statt Ziffern stellst, bekommst du noch eine zusätzliche Sicherheit rein.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Hallo,

      im eMail-Header wird nur der "Betreff" der eMail verwendet, die eMail aus dem
      Formular erschein im eMail-Text.

      Die als Schutz verwendete Rechenaufgabe wird per Zufallsgenerator aus 50
      möglichen Aufgaben ausgewählt, die allesamt sehr Simpel sind.

      Zusätzlich werden auch noch deutsche Worte verwendet - also statt 10 x 10
      wird "10 mal 10" angezeigt, aus 20 / 2 wird "20 geteilt durch 2" u.s.w.

      HTML-Tags werden vorsichtshalber auch noch mit strip_tags() entfernt.

      Was genau bewirken Zeilenumbrüche im Header und wie filtere ich die aus?

      Grüsse
      Cosinus
      Zuletzt geändert von cosinus; 04.05.2010, 01:11.
      Wer mein jemand zu sein,
      hört auf jemand zu werden...!

      Kommentar


      • #4
        Zitat von cosinus Beitrag anzeigen
        Zusätzlich werden auch noch deutsche Worte verwendet - also statt 10 x 10
        wird "10 mal 10" angezeigt, aus 20 / 2 wird "20 geteilt durch 2" u.s.w.
        Besser wäre "zehn mal zehn" und "zwanzig geteilt durch zwanzig".

        Zitat von cosinus Beitrag anzeigen
        Was genau bewirken Zeilenumbrüche im Header und wie filtere ich die aus?
        Damit kann man E-Mail-Injection betreiben. Beispiel:

        Der Betreff "Testmail"

        wird zu

        Code:
        From: user@example.com
        To: info@example.org
        Subject: Testmail
        MIME-Version: 1.0
        ...
        Aber was ist mit diesem Betreff (URL-encoded)?:
        Code:
        Mahnung%0d%0aTo:%20spamrecipient@example.com%0d%0a
        From:%20Anwalt%20%3cspoofedsender@example.com%3e%0d%0a
        (Der Umbruch vor "From:" ist nur für's Forum)

        Der wird zu

        Code:
        From: user@example.com
        To: info@example.org
        Subject: Mahnung
        To: spamrecipient@example.com
        From: Anwalt <spoofedsender@example.com>
        MIME-Version: 1.0
        ...
        Zuletzt geändert von AmicaNoctis; 04.05.2010, 01:29.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Ein Kontaktformular ist eine sensible Stelle. Willst du deine Benutzer wirklich mit solchen Aufgaben nerven? Flooding-Schutz, Badword Filter und der Spamfilter des Zielpostfachs sollten doch ausreichen, um dich vor dem gröbsten Müll zu schützen.

          Kommentar


          • #6
            Zitat von AmicaNoctis Beitrag anzeigen
            Aber was ist mit diesem Betreff (URL-encoded)?:
            Code:
            Mahnung%0d%0aTo:%20spamrecipient@example.com%0d%0a
            From:%20Anwalt%20%3cspoofedsender@example.com%3e%0d%0a
            Der wird zu

            Code:
            From: user@example.com
            To: info@example.org
            Subject: Mahnung
            To: spamrecipient@example.com
            From: Anwalt <spoofedsender@example.com>
            MIME-Version: 1.0
            ...
            Müssten dazu nicht Zeichen wie %:@ im Betreff erlaubt sein?

            Und wie filtere ich nun diese Umbrüche aus?
            Die Zeichenfolgen %0d %0a etc. aus dem Text rauslöschen?
            Hilf mir mal auf die Sprünge ;-)

            Grüsse
            Cosinus
            Zuletzt geändert von AmicaNoctis; 04.05.2010, 01:30. Grund: Umbruch im Zitat eingefügt
            Wer mein jemand zu sein,
            hört auf jemand zu werden...!

            Kommentar


            • #7
              Zitat von cosinus Beitrag anzeigen
              Müssten dazu nicht Zeichen wie %:@ im Betreff erlaubt sein
              Nein, weil PHP die selbst URL-decodiert und die dann als die Zeichen ankommen die es sind: Leerzeichen, Umbrüche, ...

              Zitat von cosinus Beitrag anzeigen
              Und wie filtere ich nun diese Umbrüche aus?
              Nicht zulassen, also z. B. mit preg_replace alles ab einem Umbruch abschneiden.
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                Zitat von onemorenerd Beitrag anzeigen
                Ein Kontaktformular ist eine sensible Stelle. Willst du deine Benutzer wirklich mit solchen Aufgaben nerven? Flooding-Schutz, Badword Filter und der Spamfilter des Zielpostfachs sollten doch ausreichen, um dich vor dem gröbsten Müll zu schützen.
                Schon klar...
                Mir ist das ziemlich egal was bei mir eintrifft.
                Meine eMail-Adresse ist schon ca. 15 Jahre alt und ich erhalte täglich einige hundert Spams.

                Ich möchte nur verhindern, dass über mein Formular tausende Spams versendet werden.

                Grüsse
                Cosinus
                Wer mein jemand zu sein,
                hört auf jemand zu werden...!

                Kommentar


                • #9
                  Zitat von AmicaNoctis Beitrag anzeigen
                  Nein, weil PHP die selbst URL-decodiert und die dann als die Zeichen ankommen die es sind: Leerzeichen, Umbrüche, ...

                  Nicht zulassen, also z. B. mit preg_replace alles ab einem Umbruch abschneiden.

                  Hallo,

                  Also die Umrüche werde ich - glaube ich - so los,
                  aber wie schneide ich alles nach dem ersten Umbruch ab??

                  PHP-Code:
                  $betreff preg_replace("/(\n|\r|\r\n)/"""$betreff); 
                  Grüsse
                  Cosinus
                  Wer mein jemand zu sein,
                  hört auf jemand zu werden...!

                  Kommentar


                  • #10
                    PHP-Code:
                    preg_replace("<[\\r\\n].*$>s"""$betreff
                    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                    Super, danke!
                    [/COLOR]

                    Kommentar


                    • #11
                      Zitat von AmicaNoctis Beitrag anzeigen
                      PHP-Code:
                      preg_replace("<[\\r\\n].*$>s"""$betreff
                      Aaaaha

                      Das Schneidet alles nach dem ersten Umbruch ab?
                      Kann ich das auch für die eMail-Adresse einsetzen, falls ich
                      diese in den Header übernehmen will?

                      Gibt es auch noch irgendwelche fiesen Tricks auf die ich
                      im eMail-Text achten muss?

                      Grüsse
                      Cosinus
                      Wer mein jemand zu sein,
                      hört auf jemand zu werden...!

                      Kommentar


                      • #12
                        Zitat von cosinus Beitrag anzeigen
                        Das Schneidet alles nach dem ersten Umbruch ab?
                        Nicht nach, sondern ab (also inklusive).

                        Zitat von cosinus Beitrag anzeigen
                        Kann ich das auch für die eMail-Adresse einsetzen, falls ich
                        diese in den Header übernehmen will?
                        Ja, warum nicht?

                        Zitat von cosinus Beitrag anzeigen
                        Gibt es auch noch irgendwelche fiesen Tricks auf die ich
                        im eMail-Text achten muss?
                        Solange du nicht mit Anhängen oder Alternativformaten (also multipart-Mails aller Art) arbeitest, ist der Message-Body nicht infiltrierbar. Bei multipart-Mails theoretisch ja, aber das kannst du verhindern, indem du vernünftige Boundaries generierst und nicht solche Sinnlosboundaries wie

                        Code:
                        ====NextPart====
                        weil die leicht zu erraten sind und damit Anhänge (z. B. Viren) eingeschleust werden könnten.
                        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                        Super, danke!
                        [/COLOR]

                        Kommentar


                        • #13
                          Zitat von cosinus Beitrag anzeigen
                          Schon klar...
                          Nee offenbar ist es nicht klar. Aber es sind ja deine User …

                          Kommentar


                          • #14
                            Zitat von onemorenerd Beitrag anzeigen
                            Ein Kontaktformular ist eine sensible Stelle. Willst du deine Benutzer wirklich mit solchen Aufgaben nerven? Flooding-Schutz, Badword Filter und der Spamfilter des Zielpostfachs sollten doch ausreichen, um dich vor dem gröbsten Müll zu schützen.
                            Ähmm...

                            Janu...

                            also...

                            Nich böse sein - aber...

                            ich verstehe nur nicht so ganz, was Dein Hinweis mit meinen Fragen nach einem Spamsicheren Formular zu tun hat...?
                            Ich will verhindern, dass irgendjemand Spams von meinem Formular versendet - klar soweit?

                            Wenn sich erst der Spamfilter des Zielpostfachs damit rumärgern muss, ist das Kind schon in den Brunnen gefallen...

                            ...und ich hab ne Menge Ärger

                            Grüsse Cosinus
                            Wer mein jemand zu sein,
                            hört auf jemand zu werden...!

                            Kommentar


                            • #15
                              Zitat von cosinus Beitrag anzeigen
                              ich verstehe nur nicht so ganz, was Dein Hinweis mit meinen Fragen nach einem Spamsicheren Formular zu tun hat...?
                              Du willst den Benutzer des Formulars mit einer Rechenaufgabe nerven, damit du keinen Stress hast. Das ist nicht sehr "kundenfreundlich".

                              Wenn sich erst der Spamfilter des Zielpostfachs damit rumärgern muss, ist das Kind schon in den Brunnen gefallen...
                              Nein, das Kind liegt im Brunnen, wenn du den Spam lesen musst. Denn dann kostet er dich Zeit. Der Spamfilter bei deinem Mailprovider arbeitet ohne dein Zutun. Der kostet dich also gar nichts. Deshalb ist es absolut okay, wenn jemand Potenzmittelwerbung mit deinem Kontaktformular abschickt. Der Spamfilter deines Mailproviders entsorgt den Mist.

                              Nochmal in aller Deutlichkeit:

                              Du sollst dein Formular vor Mail Injection (CC, BCC, etc.) schützen. Somit kann kein Spam irgendwo hingeschickt werden, sondern nur noch an deine Kontaktadresse.

                              Du kannst einen Flooding Schutz (max. x Submits pro IP und Zeitspanne) und/oder Badwordfilter implementieren.
                              Dadurch sinkt die Last auf dem Server und der Spamfilter deines Mailproviders hat auch weniger zu tun.

                              Du solltest nicht den User mit irgendwelchen Rechenaufgaben nerven!

                              Kommentar

                              Lädt...
                              X