Защита сайта от спамеров. Input pattern

255
12 апреля 2017, 12:05

Добрый вечер!

У нас проблема: два сайта нашей компании попали в какие-то списки спамеров и ежедневно приходит более 40 заявок на почту с именем типа "58ebb537ee4e7" и почтой типа "g105a@yahoo.com".

Решили защититься с помощью ограничения для строки "Имя" - только кириллица ( с помощью pattern).

При ручной проверке формы всё отлично работает (с латиницей форму не отправляет). Однако спам заявки с именами типа "58ebb537ee4e7" продолжают приходить. В чём может быть проблема?

P.s. также не работает "required" в поле с телефоном. Заявки приходят без номера телефона.

Код формы с одного из сайтов:

<form class="form-horizontal" method="post" action="order.php"> 
    <fieldset> 
        <p class="contact-message"> 
            <center><b><span style="font-size:30px; font-weight: 100;">ОСТАВЬТЕ ЗАЯВКУ</span><br><span style="font-size:20px; font-weight: 100;">наш менеджер Вам перезвонит!</span></b></center><br> 
        </p> 
        <div class="control-group"> 
            <label class="control-label" for="name">Введите имя</label> 
            <div class="controls"><input type="text" value="" name="name" required placeholder="Введите имя" pattern="^[А-Яа-яЁё\s]+$"></div> 
        </div> 
        <div class="control-group"> 
            <label class="control-label" for="phone">Введите телефон</label> 
            <div class="controls"><input type="text" value="" name="phone" required placeholder="Введите телефон" pattern="^[ 0-9]+$"></div> 
        </div> 
        <div class="control-group"> 
            <label class="control-label" for="email">Введите e-mail</label> 
            <div class="controls"><input type="text" value="" name="email" placeholder="Введите e-mail"></div> 
        </div> 
        <input type="hidden" id="" name="formochka" value="Форма_1"> 
    </fieldset> 
    <div class="control-group center"><button class="btn">Отправить &raquo;</button></div> 
</form>

Подскажите, как сделать ограничение в order.php? Сделать только проверку имени, чтобы там была хотя бы одна буква и только кириллица.

<?php 
    header("Content-Type: text/html; charset=utf-8"); 
    if($_SERVER["REQUEST_METHOD"] == "GET") 
        exit; 
 
    $email = "xxxxxxxxx@mail.ru"; 
    $title = "Новый заказ. XXXXXX"; 
    $from = 'XXXXXXXXX'; 
    $text = 'Информация о заказе: 
 
Товар: XXXXXXXXX (http://XXXXXXX.ru/) 
Имя: '.@$_POST['name'].' 
Телефон: '.@$_POST['phone'].' 
Почта: '.@$_POST['email'].' 
Время заказа: '.date("Y-m-d H:i:s").' 
 
Форма: '.@$_POST['formochka'].''; 
 
    if(mail($email, $title, $text, "Content-type:text/plain; charset = utf-8\r\nFrom:$from")) 
        echo "<html><head><title>Спасибо за заказ!</title></head><body><div style='margin: 150px auto; width: 300px;'></div></body></html> 
<meta http-equiv='refresh' content='0; url=./success.html' />"; 
    else 
        echo "<h2>Ошибка! Попробуйте ещё раз!</h2>"; 
?>

Answer 1

также не работает "required" в поле с телефоном. Заявки приходят без номера телефона.

Вот эту проблему и решите в первую очередь.

if (!isset($_POST['phone'])) { //TODO и еще проверка на пустую строку
  ...
  exit();
}

Если в будущем они это обойдут, то и с кириллицей захотят - обойдут, все кто делают боты уже готовы хоть каждый день изменения в бота вносить, лишь бы это рентабельно было.

А шаблоны проектирования здесь ни при чем. :)

READ ALSO
Как можно обратиться к элементу из списка условий для фильтра инфоблока в админке?

Как можно обратиться к элементу из списка условий для фильтра инфоблока в админке?

Делаю жесткий фильтр для пользователей по полю "Кто создал"Нужно что бы фильтр работал скрыто и пользователь не мог его отменить! Единственное...

257
Правильно ли так делать в css?

Правильно ли так делать в css?

Добрый день! Подскажите, пожалуйста, следующееВ html коде нужным мне спискам ul li я не присваиваю классы

239
Не работает событие конец скролл

Не работает событие конец скролл

alert(1) - для того чтобы узнать вообще работает ли жава с(сейчас работает

295
Идентификация элемента

Идентификация элемента

На странице выводятся данные из таблицы MySQL:

209