erste eigene PHP Seite ;)
Frank (no reg)
- php
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
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
Hi Tom.
Wie meinst du das? Header-Kontrolle?
Ciao, bis später,
Frank
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
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
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
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)
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
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
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
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
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 ":-<", 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