FormMailer offen gestalten, aber nicht für SPAM
rowdys3
- php
Hallo Leute!
Da gestern mein gesamter Webspace suspendiert wurde, weil krimineller User meinen FormMailer für Spam missbraucht haben, möchte ich Euch heute um Hilfe bitten. Dieser Space wird erst wieder freigegeben, wenn ich den FormMailer lösche, oder so gestalte, dass er nicht mehr für Spam missbraucht werden kann.
Wer kann mir da einen Tipp geben?
Hier ist der gesamte Code des FormMailers:
<?
$datum = strftime("%d.%m.%Y");
$zeit = date("H:i");
$https = $HTTP_POST_VARS;
$email = $_POST['email'];
$sender = $_POST['sender'];
$betreff = $_POST['betreff'];
$url = $_POST['url'];
$rec2 = $_POST["email2"];
$copy = $_POST["copy"];
$copyto = $_POST["SenderMail"];
$strFrom = "Privat@taskspace.de";
$typ = $_POST["typ_sender"];
$reply_to= "Privat@taskspace.de";
$text="Sie haben eine Mail am $datum um $zeit erhalten!\n
___________________________________________________
\n";
$text2="Sie haben ein Formular am $datum um $zeit ausgefüllt!\n
Dabei wurden folgende Angaben übermittelt:\n
___________________________________________________
\n";
$hidden_fields = array('next', 'url','copy','email','typ_sender','sender');
foreach ($https as $key => $value)
{
if (! in_array($key, $hidden_fields))
$text = $text."".$key." : ".stripslashes($value)."\n\n";
}
foreach ($https as $key => $value)
{
if (! in_array($key, $hidden_fields))
$text2= $text2."".$key." : ".stripslashes($value)."\n\n";
}
if(empty($betreff)) {$betreff="Formularübermittlung";}
if(empty($email)) {$email= $strFrom;}
if(empty($url)) {$url='http://www.css-maker.de';}
$reply_to = $copyto;
if ($typ ==1) {$reply_to = $sender;}
if(empty($typ)) {$reply_to=$email;}
$header = "from: FormMailer<".$strFrom.">\r\n";
$header .= "Reply-To: ".$reply_to."\r\n";
mail($email,$betreff,$text,$header) or die ("Fehler beim Übermitteln!");
if ($rec2 != "") mail($rec2,$betreff,$text,$header);
if ($copy != "") mail($copyto,$betreff,$text2,$header);
Header("Location: ".$url);
------------------------------------------------------------------
Dieser FormMailer konnte von von vielen verschiedenen Homepages aus aufgerufen werden. Man übergabe dem FormMail einfach ein in ein paar Hiddenfeldern den Empfänder der Inhalte, den Betreff und fertig. Wie kann man aber nun sicherstellen, dass dies nicht missbraucht wird?
Mit einer IP-Sperre?
Danke für Eure Tipps.
Tom
Hi rowdys3,
Wer kann mir da einen Tipp geben?
$https = $HTTP_POST_VARS;
Hier solltest du statt $HTTP_POST_VARS besser auf $_POST zurück greifen.
$email = $_POST['email'];
$rec2 = $_POST["email2"];
$copyto = $_POST["SenderMail"];
An diesen STellen hier _musst_ du feste E-Mail Adressen angeben - ich weiß, dass du das Script dann nicht von überall aus bequem ansenden kannst, aber ohne die Angabe fester E-Mail Adresse hier kannst du das Script nicht gegen Spam widmen.
Was du aber machen kannst: Ein Array anlegen, in dem alle möglichen Empfänger eingetragen sind. Dann prüfen, ob die übergebene E-Mail Adresse(n) in dem Array vorkommen und _nur_ wenn dies der Fall ist die E-Mail auch verschicken. Dann kannst du das Script immer noch mehrfach verwenden, aber es können eben nur an die dort eingetragenen E-Mail Adressen E-Mails geschickt werden.
In diesem Fall kannst dann nur noch du selber/die eingetragenen E-Mail Adressen vollgespammt werden - aber das ist wohl bei jedem Formmailer so ;-)
MfG, Dennis.
Hi rowdys3,
Was du aber machen kannst: Ein Array anlegen, in dem alle möglichen Empfänger eingetragen sind. Dann prüfen, ob die übergebene E-Mail Adresse(n) in dem Array vorkommen und _nur_ wenn dies der Fall ist die E-Mail auch verschicken. Dann kannst du das Script immer noch mehrfach verwenden, aber es können eben nur an die dort eingetragenen E-Mail Adressen E-Mails geschickt werden.
Wie so etwas aussehen kann, habe ich hier unter Formularversendung und -weiterverarbeitung - Beispielscript mal grade gezeigt.
MfG, Dennis.
Hallo Dennis!
$https = $HTTP_POST_VARS;
Hier solltest du statt $HTTP_POST_VARS besser auf $_POST zurück greifen.
Das werde ich berücksichtigen!
$email = $_POST['email'];
$rec2 = $_POST["email2"];
$copyto = $_POST["SenderMail"];
An diesen STellen hier _musst_ du feste E-Mail Adressen angeben - ich weiß, dass du das Script dann nicht von überall aus bequem ansenden kannst, aber ohne die Angabe fester E-Mail Adresse hier kannst du das Script nicht gegen Spam widmen.
Naja das geht leider nicht, da der FormMailer nicht nur für mich ist, sondern auch von anderen User genutzt werden soll. Es ist eine Art Service für meine user, die keinen php-Account haben, oder sich gar nicht mit php auskennen.
Ich weiss. Es ist ein schlechter Service, enn er Spam zulässt, aber ich sehe keine Möglichkeit einen Array mit allen bekannten Empfängern zu realisieren, da ich sie alle gar nicht kennen kann.
Kann man denn nicht eine Ip-Sperre einbauen, oder sich zumindestens die IP-mitsenden lassen, um den Urheber der Mails herauszufinden? Mir ist natürlich klar, dass es heutzutage auch IP-Verschleierer gibt, die kein korrektes Ergebnis zulassen.
So viele Fragen.....
Tom
Hi rowdys3,
Ich weiss. Es ist ein schlechter Service, enn er Spam zulässt, aber ich sehe keine Möglichkeit einen Array mit allen bekannten Empfängern zu realisieren, da ich sie alle gar nicht kennen kann.
Wenn du wirklich erfolgreich gegen Spam ankämpfen willst, wird dir nichts anderes übrig bleiben - warum richtest du nicht einen Service ein, wo sich deine User mit ihrer E-Mail Adresse eintragen müssen, das wird dann in einer MySQL Tabelle gespeichert und vor dem E-Mail Versenden prüfst du, ob die E-Mail Adresse in der MySQL Tabelle drin ist - zu beachten ist aber noch, dass jeder User nur maximal 2 E-Mail Adressen registrieren können sollen darf, sonst könnte man das eventuell immer noch für Spam benutzen.
Kann man denn nicht eine Ip-Sperre einbauen, oder sich zumindestens die IP-mitsenden lassen, um den Urheber der Mails herauszufinden? Mir ist natürlich klar, dass es heutzutage auch IP-Verschleierer gibt, die kein korrektes Ergebnis zulassen.
Eine IP Sperre ergibt keinen Sinn, sowas ist nicht realisierbar. Klar, die IP kannst du z.B. in der E-Mail mit angeben (s. $_SERVER['REMOTE_ADDR'] oder zumindest so ähnlich ;-) - solltest du vielleicht sogar machen. Eventuell ist es aber auch sinnvoll, wenn du auf dem Server eine Log-Datein führst, wo alle rausgehenden E-Mails protokoliert werden.
MfG, Dennis.
Hallo Dennis!
Wenn du wirklich erfolgreich gegen Spam ankämpfen willst, wird dir nichts anderes übrig bleiben - warum richtest du nicht einen Service ein, wo sich deine User mit ihrer E-Mail Adresse eintragen müssen, das wird dann in einer MySQL Tabelle gespeichert und vor dem E-Mail Versenden prüfst du, ob die E-Mail Adresse in der MySQL Tabelle drin ist - zu beachten ist aber noch, dass jeder User nur maximal 2 E-Mail Adressen registrieren können sollen darf, sonst könnte man das eventuell immer noch für Spam benutzen.
Kling schon ganz gut! Hast Du eine Idee, wie man einen solchen Anmeldeservice realisieren kann? Habe noch nicht so viel mit php und mySQL gemacht.
Eine IP Sperre ergibt keinen Sinn, sowas ist nicht realisierbar. Klar, die IP kannst du z.B. in der E-Mail mit angeben (s. $_SERVER['REMOTE_ADDR'] oder zumindest so ähnlich ;-) - solltest du vielleicht sogar machen. Eventuell ist es aber auch sinnvoll, wenn du auf dem Server eine Log-Datein führst, wo alle rausgehenden E-Mails protokoliert werden.
Ich werde die IP von jetzt ab mitsenden! Nun noch die Frage. Gibt es eine einfache Möglichkeit den Content, welcher sich in meinem Scruipt in $text und $text2 befindet in einer LogDatei oder einer einzelnen Mail zu speichern? Ich danke Dir nochmals für einen Tipp!
Tom
Moin.
Kling schon ganz gut! Hast Du eine Idee, wie man einen solchen Anmeldeservice realisieren kann? Habe noch nicht so viel mit php und mySQL gemacht.
Du kannst Dir mal den Newsletter ansehen, dort ist so etwas realisiert, die Daten stehen hier in einem einfachen Textfile.
Gruß Frank
Danke, ich werde es mir mal ansehen und sicher auch verwenden, wenn es denn dem entspricht, was beschrieben wurde.
Danke Tom
Du kannst Dir mal den Newsletter ansehen, dort ist so etwas realisiert, die Daten stehen hier in einem einfachen Textfile.
Gruß Frank
Hallo Dennis!
Was ich mich aber auch noch frage ist, was denn Spammer davon abhalten sollte sich selbst auch in diese SQL-Tabelle eintragen zu lassen und dabei eine Dummy-Email-Adresse einzugeben...
Davor ist man dann adoch auch nicht gefeit!
Tom
Moin!
Was ich mich aber auch noch frage ist, was denn Spammer davon abhalten sollte sich selbst auch in diese SQL-Tabelle eintragen zu lassen und dabei eine Dummy-Email-Adresse einzugeben...
Diese Dummy-Mailadresse ist aber das Mailziel deiner Mails. D.h. er kann sich dann selbst Mails an diese Adresse zuschicken, sonst aber nirgendwohin.
Und wenn du ganz schlau bist, dann generierst du bei jeder Anmeldung einen Zufallsstring und speicherst den zusammen mit dem Account, und schickst an die angegebene Mailadresse eine Mail mit einem Link und diesem Zufallscode, und der Account wird erst dann aktiviert, wenn der Mailbesitzer diesen Code eingegeben hat.
Die Sache ist die: Wenn du einen offen benutzbaren Formmailer anbietest, und nicht kontrollieren kannst, wer den für den Mailversand benutzt, dann übernimmst automatisch du die Verantwortung für den Mißbrauch. Deshalb mußt du eben alles tun, um Mißbrauch zu vermeiden, oder zumindest den Mißbrauch abschalten zu können. Genau deshalb hat dein Provider dir auch erstmal den Stecker gezogen, denn er ist es, der andernfalls darunter zu leiden hat, weil seine Server dann auf Blacklisten eingetragen werden, und sein Ruf beschädigt wird, wenn er sich nicht kümmert.
Eben deshalb gilt: Man schickt keine Mails an beliebige, von Fremden definierbare, Zieladressen.
Und wenn man es doch tun muß (du mußt es aber nicht, dein Formmail-Service sollte eben die Bedingung haben, dass nur an eine registrierte Mailadresse gemailt wird), dann muß man Maßnahmen ergreifen, die einen Mißbrauch erstens melden und zweitens eindämmen und/oder verhindern können.
- Sven Rautenberg
Moin Moin!
Diese Dummy-Mailadresse ist aber das Mailziel deiner Mails. D.h. er kann sich dann selbst Mails an diese Adresse zuschicken, sonst aber nirgendwohin.
Ok, das ist so weit klar und von mir verstanden.
Und wenn du ganz schlau bist, dann generierst du bei jeder Anmeldung einen Zufallsstring und speicherst den zusammen mit dem Account, und schickst an die angegebene Mailadresse eine Mail mit einem Link und diesem Zufallscode, und der Account wird erst dann aktiviert, wenn der Mailbesitzer diesen Code eingegeben hat.
Ich glaube, dass hier die Probleme anfange, denn leider bin ich nicht soo schlau.
Eben deshalb gilt: Man schickt keine Mails an beliebige, von Fremden definierbare, Zieladressen.
Auch da gebe ich Dir recht. Aber es gibt doch immerhin eine Hand voll Dienste und Services, die es auch schaffen es kostenlos anzubieten und das SpamProblem im Griff haben. Oder?
Und wenn man es doch tun muß (du mußt es aber nicht, dein Formmail-Service sollte eben die Bedingung haben, dass nur an eine registrierte Mailadresse gemailt wird), dann muß man Maßnahmen ergreifen, die einen Mißbrauch erstens melden und zweitens eindämmen und/oder verhindern können.
Ich werde wohl eine solche Registrierung einführen, auch wenn ich noch nicht weiss, wie man so etwas realisiert. Vielleicht finde ich dazu Anleitung hier im Forum...
Ciao und Danke
Tom