Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Заблокировать спаммера так, чтобы он об этом не догадался
цитата
07/04/14 в 19:30
 SMYK
Добрый день.
Через вебформу на сайте постоянно присылаются липовые данные с одного и того же IP. Заблокировал его через htaccess, но на след. день такой же объем спама начал литьсяс другого IP (даже из другой страны, так что подсеть заблокировать не вариант). Идея в следующем. У меня при заполнении формы вылетает алерт о успешности отправки и происходит отправка письма. Внизу приведен код формы.
IP спаммера известен. Как его доработать так, чтобы спаммер получил алерт об успешности, но письмо от него бы не отправлялось


<script>
function Formdata(data){
/* если не заполнено поле Ваше имя, длина менее 3-x*/
if (data.name != null && data.name.value.length < 3 )
{
alert('Заполните поле "Ваше имя"');
return false;}

/* если не заполнено поле Сообщение */
if (data.tel != null && data.tel.value.length < 3)
{
alert('Заполните поле "Телефон"');
return false;}

}
</script>


<?php
if(@$_POST["hidden"])
{
  $dt=date("d F Y, H:i:s"); // дата и время
  $mail="mymail@yandex.ru"; // e-mail куда уйдет письмо
  $title=""; // заголовок(тема) письма
  $fnm=$_POST["name"];
  $fnm=htmlspecialchars($fnm); // обрабатываем

  $text=$_POST["tel"];
  $ip=$_SERVER["REMOTE_ADDR"];


  $mess="<b>Имя:</b> $fnm<br>";
  $mess.="<b>Телефон:</b> $text<br>";
  $mess.="<b>IP адрес:</b> $ip<br>";
  if($_POST["mai"]){
$mai=$_POST["mai"];
$mess.="<b>Почта:</b> $mai<br>";
}
if($_POST["time"]){
$time=$_POST["time"];
$mess.="<b>Время звонка:</b> $time<br>";
}
if($_POST["dop"]){
$dop=$_POST["dop"];
$mess.="<b>Дополнительно:</b> $dop<br>";
}
  // ссылка на e-mail
  $mess.=" $dt";

  $headers="MIME-Version: 1.0\r\n";
  $headers.="Content-type: text/html; charset=windows-1251\r\n"; //кодировка
  $headers.="From: mysite.ru\r\n"; // откуда письмо (необязательнакя строка)
  mail($mail, $title, $mess, $headers); // отправляем
   $mail="info@mysite.ru"; // e-mail куда уйдет письмо
  mail($mail, $title, $mess, $headers); // отправляем

  // выводим уведомление и перезагружаем страничку
print"
<script language='Javascript' type='text/javascript'>
<!--
alert ('Ваше сообщение отправлено! Спасибо!');
function reload()
{location = \"index.php\"};
setTimeout('reload()', 0);
-->
</script>";
}
?>

Знаю, что там несложное условие прописать нужно, но сам я не кодер, поэтому прошу Вашей помощи. Заранее большое спасибо
цитата
07/04/14 в 20:11
 Stek
Как то так:

<script>
function Formdata(data){
/* если не заполнено поле Ваше имя, длина менее 3-x*/
if (data.name != null && data.name.value.length < 3 )
{
alert('Заполните поле "Ваше имя"');
return false;}

/* если не заполнено поле Сообщение */
if (data.tel != null && data.tel.value.length < 3)
{
alert('Заполните поле "Телефон"');
return false;}

}
</script>


<?php
$bad_ip = array(
    '1.2.3.4', # сколько ip надо, столько строк таких и повторить
)

if(@$_POST["hidden"])
{
  $dt=date("d F Y, H:i:s"); // дата и время
  $mail="mymail@yandex.ru"; // e-mail куда уйдет письмо
  $title=""; // заголовок(тема) письма
  $fnm=$_POST["name"];
  $fnm=htmlspecialchars($fnm); // обрабатываем

  $text=$_POST["tel"];
  $ip=$_SERVER["REMOTE_ADDR"];


  $mess="<b>Имя:</b> $fnm<br>";
  $mess.="<b>Телефон:</b> $text<br>";
  $mess.="<b>IP адрес:</b> $ip<br>";
  if($_POST["mai"]){
$mai=$_POST["mai"];
$mess.="<b>Почта:</b> $mai<br>";
}
if($_POST["time"]){
$time=$_POST["time"];
$mess.="<b>Время звонка:</b> $time<br>";
}
if($_POST["dop"]){
$dop=$_POST["dop"];
$mess.="<b>Дополнительно:</b> $dop<br>";
}
  // ссылка на e-mail
  $mess.=" $dt";

  $headers="MIME-Version: 1.0\r\n";
  $headers.="Content-type: text/html; charset=windows-1251\r\n"; //кодировка
  $headers.="From: mysite.ru\r\n"; // откуда письмо (необязательнакя строка)
 
  if (false == in_array($_SERVER['REMOTE_ADDR'], $bad_ip)) {
      mail($mail, $title, $mess, $headers); // отправляем
       $mail="info@mysite.ru"; // e-mail куда уйдет письмо
      mail($mail, $title, $mess, $headers); // отправляем 
  } else {
    // спам, игнорируем или что там еще надо сделать.
  }

  // выводим уведомление и перезагружаем страничку
print"
<script language='Javascript' type='text/javascript'>
<!--
alert ('Ваше сообщение отправлено! Спасибо!');
function reload()
{location = \"index.php\"};
setTimeout('reload()', 0);
-->
</script>";
}
?>
цитата
07/04/14 в 21:36
 SMYK
Огромное спасибо, пошел тестировать))


Эта страница в полной версии