php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


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! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack (1) Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 04-05-2010, 00:24
cosinus
 Registrierter Benutzer
Links : Onlinestatus : cosinus ist offline
Registriert seit: Jan 2003
Beiträge: 24
cosinus ist zur Zeit noch ein unbeschriebenes Blatt
Cool 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)
Mit Zitat antworten
  #2 (permalink)  
Alt 04-05-2010, 00:46
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

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!
Mit Zitat antworten
  #3 (permalink)  
Alt 04-05-2010, 01:08
cosinus
 Registrierter Benutzer
Links : Onlinestatus : cosinus ist offline
Registriert seit: Jan 2003
Beiträge: 24
cosinus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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)
Mit Zitat antworten
  #4 (permalink)  
Alt 04-05-2010, 01:16
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
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:
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
...
__________________
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)
Mit Zitat antworten
  #5 (permalink)  
Alt 04-05-2010, 01:21
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

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.
Mit Zitat antworten
  #6 (permalink)  
Alt 04-05-2010, 01:23
cosinus
 Registrierter Benutzer
Links : Onlinestatus : cosinus ist offline
Registriert seit: Jan 2003
Beiträge: 24
cosinus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
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
__________________
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
Mit Zitat antworten
  #7 (permalink)  
Alt 04-05-2010, 01:26
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
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:
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.
__________________
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!
Mit Zitat antworten
  #8 (permalink)  
Alt 04-05-2010, 01:30
cosinus
 Registrierter Benutzer
Links : Onlinestatus : cosinus ist offline
Registriert seit: Jan 2003
Beiträge: 24
cosinus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
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...!
Mit Zitat antworten
  #9 (permalink)  
Alt 04-05-2010, 01:52
cosinus
 Registrierter Benutzer
Links : Onlinestatus : cosinus ist offline
Registriert seit: Jan 2003
Beiträge: 24
cosinus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
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...!
Mit Zitat antworten
  #10 (permalink)  
Alt 04-05-2010, 01:55
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

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!
Mit Zitat antworten
  #11 (permalink)  
Alt 04-05-2010, 02:12
cosinus
 Registrierter Benutzer
Links : Onlinestatus : cosinus ist offline
Registriert seit: Jan 2003
Beiträge: 24
cosinus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
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...!
Mit Zitat antworten
  #12 (permalink)  
Alt 04-05-2010, 02:16
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

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

Zitat:
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:
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.
__________________
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!
Mit Zitat antworten
  #13 (permalink)  
Alt 04-05-2010, 02:32
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Zitat von cosinus Beitrag anzeigen
Schon klar...
Nee offenbar ist es nicht klar. Aber es sind ja deine User …
Mit Zitat antworten
  #14 (permalink)  
Alt 04-05-2010, 02:49
cosinus
 Registrierter Benutzer
Links : Onlinestatus : cosinus ist offline
Registriert seit: Jan 2003
Beiträge: 24
cosinus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
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...!
Mit Zitat antworten
  #15 (permalink)  
Alt 04-05-2010, 13:12
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
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".

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!
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
spamschutz


LinkBacks (?)
LinkBack to this Thread: https://www.php-resource.de/forum/php-developer-forum/99434-schutz-vor-spamversand-geht-s-auch-einfacher.html
Erstellt von For Type Datum
Mail Header Injection: Irgendwann lernen es alle [Sicherheitsupdate] | PHP Application and Website Defense This thread Refback 28-11-2015 22:54

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Meine ersten PHP Scripte - geht es besser / einfacher??? boehseronkel PHP Developer Forum 9 02-01-2007 22:47
Geht das auch einfacher ? Chrisi SQL / Datenbanken 5 24-02-2005 11:50
[MySQL 3.23.X] geht das auch einfacher? (ZÄHLENWENN) mrhappiness SQL / Datenbanken 1 23-06-2004 10:59
geht das einfacher ? Bernd PHP Developer Forum 6 29-04-2004 18:36
[MSSQL] Geht das auch einfacher? Magic-King SQL / Datenbanken 1 12-08-2003 22:11

Themen-Optionen
Thema bewerten
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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:19 Uhr.