Kontaktformular Spam erschweren

Aus Wiki | modified eCommerce Shopsoftware
Zur Navigation springenZur Suche springen

von daniel am Do 27. Aug 2009, 10:46

Spammer lieben Kontaktformulare wo sie direkt mit einem gepflegten "POST" oder auch "GET" wo die entsprechenden Parameter schon gesetzt sind draufgehen können. Diese kleine Erweiterung "verlangt" vom Benutzer vorher die Seite einmal normal anzusehen (was er macht, sofern er auf den Link "Kontakt" klickt z.B.) und erst dann abzusenden. Sofern er absendet ohne die Seite vorher normal gesehen zu haben gibt es eine Fehlermeldung. D.h. der normale User wird diese Fehlermeldung niemals sehen und auch nicht merken, dass da ein kleines SPAM Hindernis drin ist, der SPAMer wird erfahrungsgemäß seinen POST bzw. GET mit den Parameter abschicken und hoffen, dass es durchgeht. Bevor man also zum CAPTCHA greift hier eine kleine alternative. (sofern das nicht helfen sollte die SPAM Flut einzudämmen kann hier immernoch später das CAPTCHA eingebaut werden)

In der Datei shop_content.php nach folgendem Suchen:

    if ($_GET['coID'] == 7) {

       $error = false;
       if (isset ($_GET['action']) && ($_GET['action'] == 'send')) {
          if (xtc_validate_email(trim($_POST['email']))) {

             xtc_php_mail($_POST['email'], $_POST['name'], CONTACT_US_EMAIL_ADDRESS, CONTACT_US_NAME, CONTACT_US_FORWARDING_STRING, $_POST['email'], $_POST['name'], '', '', CONTACT_US_EMAIL_SUBJECT, nl2br($_POST['message_body']), $_POST['message_body']);

             if (!isset ($mail_error)) {
                xtc_redirect(xtc_href_link(FILENAME_CONTENT, 'action=success&coID='.(int) $_GET['coID']));
             } else {
                $smarty->assign('error_message', $mail_error);

             }
          } else {
             // error report hier einbauen
             $smarty->assign('error_message', ERROR_MAIL);
             $error = true;
          }

       }


Ersetzen durch

    if ($_GET['coID'] == 7) {
       $error = false;
       if (isset ($_GET['action']) && ($_GET['action'] == 'send')) {
          
          if($_SESSION['visited_contact'] != true)
             die("Direkter Aufruf des Kontaktformulars verboten!");
             
          if (xtc_validate_email(trim($_POST['email']))) {
             xtc_php_mail($_POST['email'], $_POST['name'], CONTACT_US_EMAIL_ADDRESS, CONTACT_US_NAME, CONTACT_US_FORWARDING_STRING, $_POST['email'], $_POST['name'], '', '', CONTACT_US_EMAIL_SUBJECT, nl2br($_POST['message_body']), $_POST['message_body']);
             
             if (!isset ($mail_error)) {
                $_SESSION['visited_contact'] = false;
                xtc_redirect(xtc_href_link(FILENAME_CONTENT, 'action=success&coID='.(int) $_GET['coID']));
             } else {
                $smarty->assign('error_message', $mail_error);
             }
          } else {
             // error report hier einbauen
             $smarty->assign('error_message', ERROR_MAIL);
             $error = true;
          }
       }

       $_SESSION['visited_contact'] = true;
           
anything