@Dastem
Программист

Как защитить сайт от спама?

Есть сайт, постоянно приходят в день по 10 заявок в таком виде:

Почта: garrett.hatch@gmail.com




С уважением,

разработчики сайта.


Сделал скрытие поля, но не помогло.
Вот скрипт который обрабатывает отправку почты:

<?php
if (isset($_POST['spam'])) {$spam = $_POST['spam'];}
if (empty($spam)) /* Проверка скрытого поля от спама */
{
  if (is_file('lib/class.phpmailer.php')) {
    require_once("lib/class.phpmailer.php");
  }

  if (is_file('lib/class.smtp.php')) {
    require_once("lib/class.smtp.php");
  }

  $http_host = $_SERVER['HTTP_HOST'];
  $body = '';

  if ( substr($http_host, 0, 4)=='www.') {
    $host_name = substr($http_host, 4);
  } else {
    $host_name = $http_host;
  }
  if (isset($_SERVER['HTTP_REFERER'])) {
    $http_referer = $_SERVER['HTTP_REFERER'];
  } else {
    $http_referer = '';
  }

  define ('HTTP_SERVER', 'http://' . $http_host . '/');
  define ('HOST_NAME', $host_name);
  define ('HTTP_REFERER', $http_referer);

  $post = array( 
    'host_name'     => HOST_NAME,
    'host_dir'      => HTTP_SERVER,
    'host_referer'  => HTTP_REFERER
    );

  if (!empty($_POST["form"])) {
    foreach( $_POST["form"] as $key => $value) { 
      $post['user_form'] = $key;
      $body .= 'Форма: ' . $post['user_form'] . chr(10) . chr(13);
    }
  }

  if (!empty($_POST["email"])) {
    $post['user_email'] = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
    $body .= 'Почта: ' . $post['user_email'] . chr(10) . chr(13);
  }

  if (!empty($_POST["name"])) {
    $post['user_name'] = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
    $body .= 'Имя: ' . $post['user_name'] . chr(10) . chr(13);
  }

  if (!empty($_POST["phone"])) {
    $post['user_phone'] = filter_input(INPUT_POST,'phone', FILTER_SANITIZE_STRING);
    $body .= 'Телефон: ' . $post['user_phone'] . chr(10) . chr(13);
  }

  if (!empty($_POST["message"])) {
    $post['user_message'] = filter_input(INPUT_POST,'message', FILTER_SANITIZE_STRING);
    $body .= 'Сообщение: ' . $post['user_message'] . chr(10) . chr(13);
  }

  if (!empty($_POST["product_name"])) {
    foreach( $_POST["product_name"] as $key => $value){ 
      $post['product_name'] = $key;
      $body .= 'Название товара: ' . $post['product_name'] . chr(10) . chr(13);
    }
  }

  if (!empty($_POST["product_article"])) {
    $first_key = reset($_POST["product_article"]);
    $body .= 'Артикулы: ';
    foreach( $_POST["product_article"] as $key => $value){ 
      $post['product_article'] = $key;
      $body .= $post['product_article'] . ' ';
    }
    $body .=  chr(10) . chr(13);
  }

  $body .= chr(10) . chr(13) . "С уважением," . chr(10) . chr(13) . "разработчики сайта " . $post['host_referer'];


  $mail = new PHPMailer();

  $mail->CharSet      = 'UTF-8';

  $mail->IsSendmail();

  $from = 'no-repeat@pemsan.ru';
  $to = "mail@,ail.com";
  $mail->SetFrom($from, HOST_NAME);
  $mail->AddAddress($to);

  $mail->isHTML(false);

  $mail->Subject      = "Новая заявка";
  $mail->Body         = $body;

  if(!$mail->send()) {
    echo 'Что-то пошло не так. ' . $mail->ErrorInfo;
    return false;
  } else {
    header("Location: ../success.html");
    return true;
  }
  }
  header("Location: ../success.html");
exit; /* Выход без отправки письма, если поле spam не пустое */

?>


Что делать? как защитить сайт от спама? Сайт на чистом HTML+CSS
  • Вопрос задан
  • 661 просмотр
Пригласить эксперта
Ответы на вопрос 4
opium
@opium
Просто люблю качественно работать
Поставьте невидимую капсулы от рекапчи раз, проверяйте сообщения через апи акисмета два
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Можно сделать отображение капчи после заполнения формы (аяксом подгружать).

UPD: Если без капчи: только проверкой событий от "мыши"/клавиатуры вместе со случайными скрытыми полями/чек-боксами, которые роботы будут заполнять в большинстве случаев.
Ну, и соответственно, можно проверить по DNSBL и спам-базам IP-шник и корректность вводимой информации в полях.
Ответ написан
torrie
@torrie
Всё знаю, всё умею
Сайт на чистом HTML+CSS

Отправка на чистом PHP
Капчу весь мир юзает, когда скрытые поля не помогают.
Ответ написан
@denchor
Я считаю, что все равно, какие фильтры и защиты ставить против спама, они помогут лишь частично. Ведь всегда найдется система по умнее. А в данной ситуацией, та же ру капча https://rucaptcha.com/ может вполне неплохо справляться. Потому, нужно искать совершенно другой путь для выхода из ситуации по уменьшению спама.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы