Kontaktformular mit Honeypot

Gesperrt
demonheart
Beiträge: 21
Registriert: Fr 14. Apr 2006, 13:50
Wohnort: Norderstedt
Kontaktdaten:

Kontaktformular mit Honeypot

Beitrag von demonheart » Mo 29. Sep 2014, 13:10

Hallo,

vorab ich bin PHP-Laie.

Seit einiger Zeit wird über das Standard-Kontaktformular per Robot Spam gesendet.
Vorname oakley suglasses wholesale
EMail lvboexlttb@gmail.com
Nachname oakley suglasses wholesale
Firma oakley suglasses wholesale
Strasse oakley suglasses wholesale
PLZOrt oakley suglasses wholesale
Telefon oakley suglasses wholesale
robotest oakley suglasses wholesale
Anliegen There\'s noticeably a bundle to learn about this. I assume you made sure good factors in options also. oakley suglasses wholesale http:// www. hab ich geaendert damit das hier kein spam ist .org
Ich habe versucht hier einen Honeypot einzubauen. Das Kontaktformular selbst funktioniert aber die Funktion bei ausfüllen des Robots wird nicht abgewiesen.

Ich hoffe ihr könnt mir helfen das Modul umzustricken.
Modul Output

Code: Alles auswählen

<?php
/**
* $RCSfile$
*
* Description: Contact Form Output
*
* @version 1.0.0
* @author Andreas Lindner
* @copyright four for business AG <www.4fb.de>
*
* {@internal
* created 2005-08-12
* modified 2008-04-11 Rudi Bieller Changes concerning new layout
* }}
*
* $Id$
*/

if (!isset($tpl) || !is_object($tpl)) {
    $tpl = new Template();
}
else
{
    $tpl->reset();
}

if (!isset ($_POST['send'])) {
    #Form has not been sent yet
    #Create contact form
    $sFormAction = $sess->url("front_content.php?idcat=$idcat&idart=$idart&parentid=$parentid");
    $tpl->set("s", 'form_action', $sFormAction);
    $tpl->set("s", "ANREDE", mi18n("Anrede"));
    $tpl->set("s", "ANREDE_OPTION1", mi18n("Herr"));
    $tpl->set("s", "ANREDE_OPTION2", mi18n("Frau"));
    $tpl->set("s", "NACHNAME", mi18n("Name"));
    $tpl->set("s", "VORNAME", mi18n("Vorname"));
    $tpl->set("s", "FIRMA", mi18n("Firma"));
    $tpl->set("s", "STRASSE", mi18n("Straße/Nr."));
    $tpl->set("s", "PLZORT", mi18n("PLZ/Ort"));
    $tpl->set("s", "TELEFON", mi18n("Telefon"));
    $tpl->set("s", "EMAIL", mi18n("E-Mail"));
    $tpl->set("s", "ANLIEGEN", mi18n("Nachricht"));
    $tpl->set("s", "PFLICHTFELDER", mi18n("Bitte alle Felder ausfüllen"));
    $tpl->set("s", "ABSCHICKEN", mi18n("abschicken"));
    $tpl->set("s", "LOESCHEN", mi18n("löschen"));
    $tpl->set("s", "robotest", mi18n("roboter"));
 if($robotest)
      $error = "You are a gutless robot.";
    else{
    $tpl->generate($cfgClient[$client]["path"]["frontend"]."templates/kontaktformular.html");
} }elseif ($_POST['send'] == 1) {
    #Form has been sent

    #Check user input
    $noerrors = true;
    $msg = '';
    if ($_POST['Vorname'] == '') {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie Ihren Vornamen ein!")."<br/>";
    }
    if ($_POST['Nachname'] == '') {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie Ihren Namen ein!")."'<br/>";
    }
    if ($_POST['EMail'] == '') {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie Ihre E-Mail-Adresse ein!")."<br/>";
    }
    if ($_POST['Strasse'] == '') {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie Ihre Stra&szlig;e ein!")."<br/>";
    }
    if ($_POST['PLZOrt'] == '') {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie Ihre PLZ/Ort ein!")."<br/>";
    }

    if ($noerrors == false) {
        echo "<p>";
        #Errors have been found
        echo "<strong>".mi18n("Beim Versenden sind folgende Fehler aufgetreten:")."</strong><br/>";
        echo $msg.'<br/>';
        echo '<a href="javascript:history.back();">&lsaquo; '.mi18n("zur&uuml;ck").'</a>';
    } else {
        #No errors, create and send mail
        $mail = new PHPMailer;
        $mail_body = '<html><head></head><body bgcolor="#ffffff"><table cellspacing="0" cellpadding="2" border="0">';

        if (is_array($_POST)) {
            foreach ($_POST as $key => $value) {
                if ($key != 'send') {
                    $mail_body .= "<tr><td>$key</td><td>$value</td></tr>";
                }
            }
        }

        $mail_body .= '</table></bo'.'dy></html>';
        $mail->Host = "localhost";
        $mail->IsHTML(true);

        #Get mailer from settings
        switch (strtolower("CMS_VALUE[4]")) {
            case "smtp" :
                $mail->IsSMTP();
                $host = "CMS_VALUE[5]";
                $user = "CMS_VALUE[6]";
                $password = "CMS_VALUE[7]";
                if (($host != '') && ($user != '') && ($password != '')) {
                    $mail->SMTPAuth = true;
                    $mail->Host = $host;
                    $mail->Username = $user;
                    $mail->Password = $password;
                }
                break;
            case "mail" :
                $mail->IsMail();
                break;
            case "sendmail" :
                $mail->IsSendmail();
                break;
            case "qmail" :
                $mail->IsQmail();
                break;
            default :
                }
        $mail->From = "CMS_VALUE[0]";
        $mail->FromName = "CMS_VALUE[2]";
        $mail->AddAddress("CMS_VALUE[1]", "");
        $mail->Subject = "CMS_VALUE[3]";
        $mail->Body = $mail_body;
        $mail->WordWrap = 50;
        $mail->Send();
    
        #Display message after mail is sent
        echo mi18n("Ihr Anliegen wurde uns übermittelt. Vielen Dank!")."<br/><br/><br/><br/>";
    }
}
?>
Modul-Template:

Code: Alles auswählen

<div id="contactForm"><h1 class="abs25">Kontaktformular</h1>
    <form action="{form_action}" method="post">
        <input type="hidden" name="send" value="1" />
        <div class="contactRow clearfix">
            <table>
                <tr>
                    <td class="pt" style="width:80px;"><label for="Anrede">{ANREDE}</label></td>
                    <td style="width:10px;"><input type="radio" name="Anrede" value="{ANREDE_OPTION1}" id="Anrede" checked="checked" style="width:auto;border:0;" /></td>
                    <td class="pt">{ANREDE_OPTION1}</td>
                    <td style="width:10px;"><input type="radio" name="Anrede" value="{ANREDE_OPTION2}" style="width:auto;border:0;" /></td>
                    <td class="pt">{ANREDE_OPTION2}</td>
                    <td class="pt" style="text-align:right;">* {PFLICHTFELDER}</td>
                </tr>
            </table>
        </div>
        <div class="contactRow clearfix">
            <label for="Vorname">{VORNAME} *</label>
            <input type="text" name="Vorname" id="Vorname" class="eingabe" maxlength="100"/>
        </div>
        <div class="contactRow clearfix">
            <label for="Name">{NACHNAME} *</label>
            <input type="text" name="Nachname" id="Nachname" class="eingabe" maxlength="100"/>
        </div>
        <div class="contactRow clearfix">
            <label for="Firma">{FIRMA}</label>
            <input type="text" name="Firma" id="Firma" class="eingabe" maxlength="100"/>
        </div>
        <div class="contactRow clearfix">
            <label for="Strasse">{STRASSE} *</label>
            <input type="text" name="Strasse" id="Strasse" class="eingabe" maxlength="100"/>
        </div>
        <div class="contactRow clearfix">
            <label for="PLZOrt">{PLZORT} *</label>
            <input type="text" name="PLZOrt" id="PLZOrt" class="eingabe" maxlength="100"/>
        </div>
        <div class="contactRow clearfix">
            <label for="Telefon">{TELEFON} *</label>
            <input type="text" name="Telefon" id="Telefon" class="eingabe" maxlength="100"/>
        </div>
        <div class="contactRow clearfix">
            <label for="EMail">{EMAIL} *</label>
            <input type="text" name="EMail" id="EMail" class="eingabe" maxlength="100"/>
        </div>
        <div class="contactRow clearfix">
            <label for="Anliegen">{ANLIEGEN} *</label>
            <textarea name="Anliegen" id="Anliegen"></textarea>
        </div>
         <div class="print" id="pot">
      <label>Wenn du menschlich bist und dieses Feld siehst, lass es leer!</label>
      <input name="robotest" type="text" id="robotest" class="print" maxlength="100" />
    </div>
        <div id="contactFormSubmit" class="clearfix">
            <div id="contactFormSubmitLeft">
                <input type="reset" value="{LOESCHEN}" />
            </div>
            <div class="print" id="contactFormSubmitRight">
            </div>
            <div id="contactFormSubmitRight">
                <input type="submit" value="{ABSCHICKEN}" />
            </div>
        </div>
    </form>
</div>
<div id="abs" class="abs50"></div>

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Kontaktformular mit Honeypot

Beitrag von Faar » Mo 29. Sep 2014, 15:07

Schau mal da, http://www.dfabig.de/de/download/conten ... enido.html
Das ist zwar für die 4.9 Version aber das Formular hatte ich aus der 4.8. Version angepasst und das Prinzip der Spamfalle ist gleich geblieben.
Ich habe dort eine Spamfalle für Robots eingebaut und die funktioniert super.
Vielleicht kannst du dir da den passenden Code heraus ziehen.
Vielleicht finde ich auch mal die Zeit, den 4.8 Code noch in den Download zu packen.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Kontaktformular mit Honeypot

Beitrag von Oldperl » Di 30. Sep 2014, 12:03

Alternativ kann man auch das BadBehavior-Plugin nutzen, welches viele Bots aussperrt :arrow: http://forum.contenido.org/viewtopic.php?f=66&t=28958

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

demonheart
Beiträge: 21
Registriert: Fr 14. Apr 2006, 13:50
Wohnort: Norderstedt
Kontaktdaten:

Re: Kontaktformular mit Honeypot

Beitrag von demonheart » Mi 1. Okt 2014, 11:01

Danke für die Hinweise! Das BadBehavior-Plugin werde ich mir auch mal anschauen.

Trotzdem habe ich den Ergeiz den Honeypot irgendwie zu hin zu kriegen.

Aus Faar's Modul habe ich versucht die Codeschnipsel in das Formular-Modul einzubauen - leider funktioniert das nicht.
Das Formular wird versendet ob da was drin steht im Feld oder nicht.

Bitte steinigt mich nicht wenn im PHP sogar grobe Schnitzer drin sind, ich bin da echt Anfänger mit PHP.

Vielleicht könnt Ihr euch das ja mal anschauen, ich habe folgendes versucht:

Code: Alles auswählen

<?php
/**
* $RCSfile$
*
* Description: Contact Form Output
*
* @version 1.0.0
* @author Andreas Lindner
* @copyright four for business AG <www.4fb.de>
*
* {@internal
* created 2005-08-12
* modified 2008-04-11 Rudi Bieller Changes concerning new layout
* }}
*
* $Id$
*/

if (!isset($tpl) || !is_object($tpl)) {
    $tpl = new Template();
}
else
{
    $tpl->reset();
}

if (!isset ($_POST['send'])) {
    #Form has not been sent yet
    #Create contact form
    $sFormAction = $sess->url("front_content.php?idcat=$idcat&idart=$idart&parentid=$parentid");
    $tpl->set("s", 'form_action', $sFormAction);
    $tpl->set("s", "ANREDE", mi18n("Anrede"));
    $tpl->set("s", "ANREDE_OPTION1", mi18n("Herr"));
    $tpl->set("s", "ANREDE_OPTION2", mi18n("Frau"));
    $tpl->set("s", "NACHNAME", mi18n("Name"));
    $tpl->set("s", "VORNAME", mi18n("Vorname"));
    $tpl->set("s", "FIRMA", mi18n("Firma"));
    $tpl->set("s", "STRASSE", mi18n("Straße/Nr."));
    $tpl->set("s", "PLZORT", mi18n("PLZ/Ort"));
    $tpl->set("s", "TELEFON", mi18n("Telefon"));
    $tpl->set("s", "EMAIL", mi18n("E-Mail"));
    $tpl->set("s", "ANLIEGEN", mi18n("Nachricht"));
    $tpl->set("s", "PFLICHTFELDER", mi18n("Bitte alle Felder ausfüllen"));
    $tpl->set("s", "ABSCHICKEN", mi18n("abschicken"));
    $tpl->set("s", "LOESCHEN", mi18n("löschen"));
    $tpl->set("s", "robotest", mi18n("robotest"));
      $noerrors = true;
    $isValid = true;
    $msg = '';
    $msg2 = '';
    if ($_POST['robotest'] != '') { // Spamfilter
        $robotest = $_POST['robotest'];
        $noerrors = false;
        $msg .= mi18n("You are a gutless robot.");
   } if (is_writable($filename)) {
            if (!$handle = fopen($filename, "a")) {
                 // nothing
            }
            if (!fwrite($handle, $spamcontent)) {
                // nothing
            }
            // nothing
            fclose($handle);
        } else {
            // nothing
        
    $tpl->generate($cfgClient[$client]["path"]["frontend"]."templates/kontaktformular.html");
} }elseif ($_POST['send'] == 1) {
    #Form has been sent

    #Check user input
    $noerrors = true;
    $msg = '';
    if ($_POST['Vorname'] == '') {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie Ihren Vornamen ein!")."<br/>";
    }
    if ($_POST['Nachname'] == '') {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie Ihren Namen ein!")."'<br/>";
    }
    if ($_POST['EMail'] == '') {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie Ihre E-Mail-Adresse ein!")."<br/>";
    }
    if ($_POST['Strasse'] == '') {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie Ihre Stra&szlig;e ein!")."<br/>";
    }
    if ($_POST['PLZOrt'] == '') {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie Ihre PLZ/Ort ein!")."<br/>";
    }

    if ($noerrors == false) {
        echo "<p>";
        #Errors have been found
        echo "<strong>".mi18n("Beim Versenden sind folgende Fehler aufgetreten:")."</strong><br/>";
        echo $msg.'<br/>';
        echo '<a href="javascript:history.back();">&lsaquo; '.mi18n("zur&uuml;ck").'</a>';
    } else {
        #No errors, create and send mail
        $mail = new PHPMailer;
        $mail_body = '<html><head></head><body bgcolor="#ffffff"><table cellspacing="0" cellpadding="2" border="0">';

        if (is_array($_POST)) {
            foreach ($_POST as $key => $value) {
                if ($key != 'send') {
                    $mail_body .= "<tr><td>$key</td><td>$value</td></tr>";
                }
            }
        }

        $mail_body .= '</table></bo'.'dy></html>';
        $mail->Host = "localhost";
        $mail->IsHTML(true);

        #Get mailer from settings
        switch (strtolower("CMS_VALUE[4]")) {
            case "smtp" :
                $mail->IsSMTP();
                $host = "CMS_VALUE[5]";
                $user = "CMS_VALUE[6]";
                $password = "CMS_VALUE[7]";
                if (($host != '') && ($user != '') && ($password != '')) {
                    $mail->SMTPAuth = true;
                    $mail->Host = $host;
                    $mail->Username = $user;
                    $mail->Password = $password;
                }
                break;
            case "mail" :
                $mail->IsMail();
                break;
            case "sendmail" :
                $mail->IsSendmail();
                break;
            case "qmail" :
                $mail->IsQmail();
                break;
            default :
                }
        $mail->From = "CMS_VALUE[0]";
        $mail->FromName = "CMS_VALUE[2]";
        $mail->AddAddress("CMS_VALUE[1]", "");
        $mail->Subject = "CMS_VALUE[3]";
        $mail->Body = $mail_body;
        $mail->WordWrap = 50;
        $mail->Send();
    
        #Display message after mail is sent
        echo mi18n("Ihr Anliegen wurde uns übermittelt. Vielen Dank!")."<br/><br/><br/><br/>";
    }
}
?>



demonheart
Beiträge: 21
Registriert: Fr 14. Apr 2006, 13:50
Wohnort: Norderstedt
Kontaktdaten:

Gelöst!!! Kontaktformular mit Honeypot

Beitrag von demonheart » Mi 1. Okt 2014, 11:18

Verdammt, ich hab's hin gekriegt! *freu

Folgender Code funktioniert:

Code: Alles auswählen

<?php
/**
* $RCSfile$
*
* Description: Contact Form Output
*
* @version 1.0.0
* @author Andreas Lindner
* @copyright four for business AG <www.4fb.de>
*
* {@internal
* created 2005-08-12
* modified 2008-04-11 Rudi Bieller Changes concerning new layout
* }}
*
* $Id$
*/

if (!isset($tpl) || !is_object($tpl)) {
    $tpl = new Template();
}
else
{
    $tpl->reset();
}

if (!isset ($_POST['send'])) {
    #Form has not been sent yet
    #Create contact form
    $sFormAction = $sess->url("front_content.php?idcat=$idcat&idart=$idart&parentid=$parentid");
    $tpl->set("s", 'form_action', $sFormAction);
    $tpl->set("s", "ANREDE", mi18n("Anrede"));
    $tpl->set("s", "ANREDE_OPTION1", mi18n("Herr"));
    $tpl->set("s", "ANREDE_OPTION2", mi18n("Frau"));
    $tpl->set("s", "NACHNAME", mi18n("Name"));
    $tpl->set("s", "VORNAME", mi18n("Vorname"));
    $tpl->set("s", "FIRMA", mi18n("Firma"));
    $tpl->set("s", "STRASSE", mi18n("Straße/Nr."));
    $tpl->set("s", "PLZORT", mi18n("PLZ/Ort"));
    $tpl->set("s", "TELEFON", mi18n("Telefon"));
    $tpl->set("s", "EMAIL", mi18n("E-Mail"));
    $tpl->set("s", "ANLIEGEN", mi18n("Nachricht"));
    $tpl->set("s", "PFLICHTFELDER", mi18n("Bitte alle Felder ausfüllen"));
    $tpl->set("s", "ABSCHICKEN", mi18n("abschicken"));
    $tpl->set("s", "LOESCHEN", mi18n("löschen"));
    $tpl->set("s", "robotest", mi18n("robotest"));
     
    
   if (is_writable($filename)) {
            if (!$handle = fopen($filename, "a")) {
                 // nothing
            }
            if (!fwrite($handle, $spamcontent)) {
                // nothing
            }
            // nothing
            fclose($handle);
        } else {
            // nothing
        
    $tpl->generate($cfgClient[$client]["path"]["frontend"]."templates/kontaktformular.html");
} }elseif ($_POST['send'] == 1) {
    #Form has been sent

    #Check user input
    $noerrors = true;
    $msg = '';
    $msg2 = '';
   if ($_POST['robotest'] != '') { // Spamfilter
        $robotest = $_POST['robotest'];
        $noerrors = false;
        $msg .= mi18n("You are a gutless robot.");
   } 
    if ($_POST['Vorname'] == '') {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie Ihren Vornamen ein!")."<br/>";
    }
    if ($_POST['Nachname'] == '') {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie Ihren Namen ein!")."'<br/>";
    }
    if ($_POST['EMail'] == '') {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie Ihre E-Mail-Adresse ein!")."<br/>";
    }
    if ($_POST['Strasse'] == '') {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie Ihre Stra&szlig;e ein!")."<br/>";
    }
    if ($_POST['PLZOrt'] == '') {
        $noerrors = false;
        $msg .= mi18n("Bitte geben Sie Ihre PLZ/Ort ein!")."<br/>";
    }

    if ($noerrors == false) {
        echo "<p>";
        #Errors have been found
        echo "<strong>".mi18n("Beim Versenden sind folgende Fehler aufgetreten:")."</strong><br/>";
        echo $msg.'<br/>';
        echo '<a href="javascript:history.back();">&lsaquo; '.mi18n("zur&uuml;ck").'</a>';
    } else {
        #No errors, create and send mail
        $mail = new PHPMailer;
        $mail_body = '<html><head></head><body bgcolor="#ffffff"><table cellspacing="0" cellpadding="2" border="0">';

        if (is_array($_POST)) {
            foreach ($_POST as $key => $value) {
                if ($key != 'send') {
                    $mail_body .= "<tr><td>$key</td><td>$value</td></tr>";
                }
            }
        }

        $mail_body .= '</table></bo'.'dy></html>';
        $mail->Host = "localhost";
        $mail->IsHTML(true);

        #Get mailer from settings
        switch (strtolower("CMS_VALUE[4]")) {
            case "smtp" :
                $mail->IsSMTP();
                $host = "CMS_VALUE[5]";
                $user = "CMS_VALUE[6]";
                $password = "CMS_VALUE[7]";
                if (($host != '') && ($user != '') && ($password != '')) {
                    $mail->SMTPAuth = true;
                    $mail->Host = $host;
                    $mail->Username = $user;
                    $mail->Password = $password;
                }
                break;
            case "mail" :
                $mail->IsMail();
                break;
            case "sendmail" :
                $mail->IsSendmail();
                break;
            case "qmail" :
                $mail->IsQmail();
                break;
            default :
                }
        $mail->From = "CMS_VALUE[0]";
        $mail->FromName = "CMS_VALUE[2]";
        $mail->AddAddress("CMS_VALUE[1]", "");
        $mail->Subject = "CMS_VALUE[3]";
        $mail->Body = $mail_body;
        $mail->WordWrap = 50;
        $mail->Send();
    
        #Display message after mail is sent
        echo mi18n("Ihr Anliegen wurde uns übermittelt. Vielen Dank!")."<br/><br/><br/><br/>";
    }
}
?>
In das Modul Template habe ich das Textfeld eingebunden und per CSS hidden gesetzt

Code: Alles auswählen

<div class="print" id="pot">
      <label>Wenn du menschlich bist und dieses Feld siehst, lass es leer!</label>
      <input name="robotest" type="text" id="robotest" class="print" maxlength="100" />
    </div>

Gesperrt