Проблема со спамом контактной формы PHP

Недавно я исправил свою контактную форму на своем веб-сайте, но у меня возникла проблема. Люди могут отправлять мне электронные письма, не добавляя ничего в поля контактной формы.

Таким образом, люди могут просто нажать кнопку «Отправить», не вводя ничего, что действительно раздражает.

В любом случае, чтобы исправить это?

Вот мой код PHP: https://hastebin.com/ukowawovab.pl

Вот мой HTML-код: https://hastebin.com/hisayacuji.xml

Спасибо! ТрайфлТауэр


person Community    schedule 26.02.2017    source источник
comment
поместите свой код здесь, галочки не пустые (вы, кажется, знаете, что вы должны это сделать), добавьте CAPCHA   -  person    schedule 27.02.2017
comment
это на самом деле проще, чем вы думаете. Проверяйте наличие пустых значений и используйте полные заголовки   -  person Funk Forty Niner    schedule 27.02.2017
comment
Я добавил свой HTML-код в тему. Я новичок в PHP, поэтому не знаю, как проверять пустые значения и использовать полные заголовки и т. д.   -  person    schedule 27.02.2017
comment
пусто()   -  person    schedule 27.02.2017


Ответы (1)


Как я уже говорил в комментариях, проверьте наличие пустых полей.

Даже с добавленным required боты могут напрямую обращаться к php-файлу или другим файлам.

<?php

if(!empty($_REQUEST['name'])

&& !empty($_REQUEST['email'])

&& !empty($_REQUEST['skype'])

&& !empty($_REQUEST['message'])){

 $to = "[email protected]";
 $subject = "FluxDesigns Contact Form";
 $name = $_REQUEST['name'];
 $email = $_REQUEST['email'];
 $skype = $_REQUEST['skype'];
 $message = $_REQUEST['message'];
 $ip = $_SERVER['REMOTE_ADDR'];
 $body = " Name: $name \n Email: $email \n Skype: $skype \n Message: $message \n\n IP Address: $ip";
 if (mail($to, $subject, $body)) {
   header('Location: /thanks');
   exit; // added that to prevent further execution
  }

 }
 else{
     echo "Fill in all fields";

     }

Вы можете дополнительно добавить флажок и проверить, установлен ли он с помощью isset() и обрабатывать это соответственно.

Однако вы должны использовать полные заголовки, как указано в руководстве mail(). В противном случае вы можете его не получить или оно может быть расценено как спам.

Полные заголовки означают наличие действительного адреса электронной почты From.

Пример из мануала:

<?php
$to      = '[email protected]';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: [email protected]' . "\r\n" .
    'Reply-To: [email protected]' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);

Вы также должны создать запись SPF, но это выходит за рамки этого вопроса.

person Funk Forty Niner    schedule 26.02.2017