Spam über Homepageformular

gianfranco0104

Erfahrenes Mitglied
Habe mal wieder ein Problem.

Obwohl ich eine Abfrage habe, dass Name, Betreff und Email eingegeben werden MUSS, gelingt es doch jemanden, dass er mir folgende message senden:

Name:Mark

Email:

Betreff:brmMRrECZubvIzWfu

Nachricht:SKWTg4http://www.FyLitCl7Pf7kj... (link habe ich nicht vervollständigt dargestellt)
wie kann das sein und vorallem wie schafft er das? ich kenne mich da zuwebig aus, aber welche Möglichkeiten habe ich? kann es sein, dass ich die EMailadresse im PHP auch verschlüsseln muss? macht er das direkt über das PHP Programm und nicht via HTML und dem FOrmular?

Danke schonmal für die Hilfe
 
Hi

das Hauptproblem ist also, warum dieser Spammer das ohne Eingabe der eigenen Mailadresse abschicken kann? Oder wie man Spam generell reduziert? Für Ersteres müsste man den Code sehen ... weil da ein Fehler drin sein wird.
 
einfach das generell die spams rein kommen - ich war zugleich einfach verblüfft, warum die Nachricht raus ging ohne mail angabe.

aber hier mal die codes:

HTML:
<form id="contact_form" name="cform" class="clearfix form oswald normal antialiased" method="post" action="php/mailnorm.php">
                        <!-- 50% inputs -->
                        <div class="fullwidth clearfix">
                            <!-- Left Item -->
                            <div class="f-left">
                                <!-- Name -->
                                <input type="text" name="name" id="name" required placeholder="Name">
                            </div>
                            <!-- Rechtes Item -->
                            <div class="f-right">
                                <!-- Email -->
                                <input type="email" name="email" id="email" required placeholder="E-Mail">
                            </div>
                        </div>
                        <!-- Ende 50% inputs -->
                        <!-- Betreff -->
                        <input type="text" name="subject" id="subject" required placeholder="Betreff">

                        <!-- Nachricht -->
                        <textarea name="message" id="message" required placeholder="Ihre Nachricht"></textarea>

                        <!-- <input type="text" name="verify" id="verify" required placeholder=""> -->

                        <!-- Senden Button -->
                        <button type="submit" id="submit" name="submit">Senden</button>
                        <!-- Fehler Message -->
                        <div class="error_message">
                            <p class="t-left no-margin">
                                <!-- Fehler Message Icon -->
                                <i class="fa fa-warning"></i>
                                Da hat etwas bei der Überprüfung nicht geklappt. Bitte die <span style="color:limegreen">grün markierten Felder</span> ausfüllen und nocheinmal versuchen.
                            </p>
                        </div>
                        <!-- Nachricht senden -->
                        <div class="submit_message">
                            <p class="t-left no-margin">
                                <!-- Fehler Message Icon -->
                                <i class="fa fa-check"></i>
                                Vielen Dank für die Nachricht ! Die Email ist eingegangen.
                            </p>
                        </div>
                    </form>
                    <!-- Ende Form -->

und php

PHP:
<?
require("class.phpmailer.php");


    //form validation vars
    $formok = true;
    $errors = array();
   
    //sumbission data
    $ipaddress = $_SERVER['REMOTE_ADDR'];
    $date = date('d/m/Y');
    $time = date('H:i:s');
   
    //form data
    $name = $_POST['name'];   
    $email = $_POST['email'];
    $subject = $_POST['subject'];
    $message = $_POST['message'];


$mail = new PHPMailer();

$mail->IsSMTP();                                              // send via SMTP
$mail->Host     = "mailout.one.com";                              // SMTP server - or mail.yourdomain.com

$mail->Port = 25;   

$mail->From     = "***.***.**";                    // Noreply address on your sevrer - Again
$mail->AddAddress("***.***.**");                  // Your Adress Here
$mail->Subject  =  "Eine Email aus der ***!";
$mail->IsHTML(true); 
$mail->CharSet = 'UTF-8';
$mail->Body     =  "<p>Hallo ***! Du hast eine Email bekommen, die von deiner Homepage aus gesendet wurde :).</p>
                      <p><strong>Name: </strong> {$name} </p>
                      <p><strong>Email: </strong> {$email} </p>
                      <p><strong>Betreff: </strong> {$subject} </p>
                      <p><strong>Nachricht: </strong> {$message} </p>
                      <p>Die IP des Senders (ggf. bei unsachg. Verhalten): {$ipaddress} on {$date} at {$time}</p>";

if(!$mail->Send())
{
   echo "Mail NICHT gesendet <p>";
   echo "Mailer Fehler: " . $mail->ErrorInfo;
  
   exit;
}

echo "Mail gesendet";


// Mail an Bucher, dass OK
  $autoemail = new PHPMailer(); 
  $autoemail->IsSMTP();                                              // send via SMTP
  $autoemail->Host     = "mailout.one.com";                          // SMTP server - or mail.yourdomain.com
  $autoemail->Port = 25;   

  $autoemail->From = "***.***.**"; 
  $autoemail->FromName = "***"; 
  $autoemail->AddAddress($email); //($mail->From, $mail->FromName); 
  $autoemail->Subject = "Deine Anfrage bei ***"; 
  $autoemail->IsHTML(true); 
  $autoemail->CharSet = 'UTF-8';
  $autoemail->Body = "<p>Hallo {$name},<br><br>
                        vielen Dank für Deine Mail, sie ist bei mir eingegangen<br>
                        Ich werde Dir in Kürze darauf antworten.
                        <br><br>
                        Liebe Grüße <br>
                        Bibi Friesen <br><br>

                        ***.***.**
                       ***
                    </p>";
  $autoemail->Send();
  
   // ENDE


?>
 
Zuletzt bearbeitet von einem Moderator:
Für mich sieht das so aus, als ob nur auf Client Seite über required die Pflichtfelder markiert werden.

Abgesehen davon, daß es Browser gibt, bei denen du hemmungslos den Quelltext ändern und so weiterverwenden kannst, wird hier vermutlich über ein Script der PHP Teil direkt angesprochen. Und da wird ja nichts mehr geprüft, sondern nur versendet. Du müßtest auf jeden Fall dort nochmal alle Felder auf Inhalt und Konsistenz prüfen und evtl. den Versand verhindern und eine Meldung an den Client zurück geben.
 
Genau.
Prüfungen auf Clientseite sind wertlos, das "muss" am Server gemacht werden
Man kann es "zusätzlich" auch am Client machen, um dem Benutzer zB. gleich vor
dem Forumlar-abschicken zu sagen, dass was nicht passt, aber nicht zum endgültigen Prüfen.

Für Spamverhinderung generell, wie wäre es mit Captchas?

PS: Habe deinen Beitrag bearbeitet, um einige persönliche Infos aus dem Code rauszunehmen.
Sonst bekommst du bald noch viel mehr Spam.
 
Hi,

dem Spammer ist das HTML-Attribut "required" egal, der benutzt entweder keinen Browser oder hat das einfach per Firebug geändert und rausgenommen.
Auf den ersten Blick fallen mir hier gleich mehrere Probleme auf:
- Du überprüfst im Backend (PHP) überhaupt keine Daten
- Der Absender kann dir in deine Mail auch Schadcode einfügen (!)
- Der Spammer kann über die zweite Mail auch an wildfremde Leute Mails schicken und den Text durch die Lücke #2 auch beliebig gestalten!

Zuerst würde ich in das Kontaktformular ein Captcha einbauen, sowie ein Textfeld welches per CSS versteckt ist.
Die Spammer sind normalerweise so geschrieben, dass sie in alle Felder einfach irgendwas eintragen.

Im PHP-Teil musst du noch folgende Daten prüfen:
- Ist die EMail-Addresse gültig?
- Sind alle Felder (bis auf das versteckte Feld) gefüllt?
- Wenn das versteckte Feld gefüllt ist => Spammer
- Wenn das Captcha falsch ist => Entweder Tippfehler oder Spammer
- Die zweite Mail unbedingt rausnehmen und die Antwort manuell nach Sichtkontrolle senden
- Die Daten in der Mail müssen unbedingt escaped werden (zum Beispiel per filter_var() oder htmlentities())

Für das Captcha kannst du zum Beispiel Recaptcha nehmen (ist einfach und imho auch ziemlich sicher), für die Validierung der Parameter dann filter_var().

Grüsse,
BK
 
Es wäre zuviel verlangt hier alle SPAM-SCHUTZ Maßnahmen für ein Form-Feld zu schreiben. Es gibt ein paar wenige gute Webseiten, auf denen diese hinterlegt sind.
Das Problem dabei ist, wenn SPAM-SCHUTZ Maßnahmen veröffentlicht werden, dann kennt sie auch der Spammer.
Ich gebe hier ehrlich zu mir ein sehr aufwendiges Form-Feld gebastelt zu haben und werde einen Teufel tun und meine SPAM-SCHUTZ Maßnahmen im Internet posten. Harte Zeiten.
Wer sucht der findet.

Nutze in PHP pattern und preg_match. Vergiss ein exit; nach jeder if Prüfung nicht.

Hier offizielle Infos:
http://www.w3schools.com/php/php_form_url_email.asp
http://php.net/manual/de/function.preg-match.php

Informiere dich über Reguläre Ausdrücke und deren Maskierung/Escapen in PHP.

Ansonsten ist ReCaptcha zurzeit(!) ein gutes Zusatzfeature und sehr leicht zu integrieren.
Aber, in den Google ReCaptcha PHP-Code muss ein exit; eingebaut werden, sonst kommt es dennoch durch, nur als Spam gekennzeichnet.
 
Zurück