| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

04-05-2010, 00:24
|
|
cosinus
Registrierter Benutzer
|
|
Registriert seit: Jan 2003
Beiträge: 24
|
|
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
__________________
Wer mein jemand zu sein,
hört auf jemand zu werden...!
Geändert von cosinus (04-05-2010 um 00:27 Uhr)
|

04-05-2010, 00:46
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
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
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

04-05-2010, 01:08
|
|
cosinus
Registrierter Benutzer
|
|
Registriert seit: Jan 2003
Beiträge: 24
|
|
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
__________________
Wer mein jemand zu sein,
hört auf jemand zu werden...!
Geändert von cosinus (04-05-2010 um 01:11 Uhr)
|

04-05-2010, 01:16
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Zitat:
Zitat von cosinus
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:
Zitat von cosinus
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
...
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
Geändert von AmicaNoctis (04-05-2010 um 01:29 Uhr)
|

04-05-2010, 01:21
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
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.
|

04-05-2010, 01:23
|
|
cosinus
Registrierter Benutzer
|
|
Registriert seit: Jan 2003
Beiträge: 24
|
|
Zitat:
Zitat von AmicaNoctis
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
__________________
Wer mein jemand zu sein,
hört auf jemand zu werden...!
Geändert von AmicaNoctis (04-05-2010 um 01:30 Uhr)
Grund: Umbruch im Zitat eingefügt
|

04-05-2010, 01:26
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Zitat:
Zitat von cosinus
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:
Zitat von cosinus
Und wie filtere ich nun diese Umbrüche aus?
|
Nicht zulassen, also z. B. mit preg_replace alles ab einem Umbruch abschneiden.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

04-05-2010, 01:30
|
|
cosinus
Registrierter Benutzer
|
|
Registriert seit: Jan 2003
Beiträge: 24
|
|
Zitat:
Zitat von onemorenerd
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...!
|

04-05-2010, 01:52
|
|
cosinus
Registrierter Benutzer
|
|
Registriert seit: Jan 2003
Beiträge: 24
|
|
Zitat:
Zitat von AmicaNoctis
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...!
|

04-05-2010, 01:55
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
PHP-Code:
preg_replace("<[\\r\\n].*$>s", "", $betreff)
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

04-05-2010, 02:12
|
|
cosinus
Registrierter Benutzer
|
|
Registriert seit: Jan 2003
Beiträge: 24
|
|
Zitat:
Zitat von AmicaNoctis
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...!
|

04-05-2010, 02:16
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Zitat:
Zitat von cosinus
Das Schneidet alles nach dem ersten Umbruch ab?
|
Nicht nach, sondern ab (also inklusive).
Zitat:
Zitat von cosinus
Kann ich das auch für die eMail-Adresse einsetzen, falls ich
diese in den Header übernehmen will?
|
Ja, warum nicht?
Zitat:
Zitat von cosinus
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
weil die leicht zu erraten sind und damit Anhänge (z. B. Viren) eingeschleust werden könnten.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

04-05-2010, 02:32
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Zitat:
Zitat von cosinus
Schon klar...
|
Nee offenbar ist es nicht klar. Aber es sind ja deine User …
|

04-05-2010, 02:49
|
|
cosinus
Registrierter Benutzer
|
|
Registriert seit: Jan 2003
Beiträge: 24
|
|
Zitat:
Zitat von onemorenerd
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...!
|

04-05-2010, 13:12
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Zitat:
Zitat von cosinus
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".
Zitat:
|
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!
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|