@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/ может вполне неплохо справляться. Потому, нужно искать совершенно другой путь для выхода из ситуации по уменьшению спама.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы