BNAME.RU » Блоги » Программирование » PHP » Простая, но эффективная защита формы сайта от спама, без капчи. Средствами HTML, PHP, CSS

Простая, но эффективная защита формы сайта от спама, без капчи. Средствами HTML, PHP, CSS

В данной статье рассмотрим один из самых эффективных вариантов защиты формы сайта от спама. Данный код применим как к форме регистрации, авторизации, обратной связи, поля оформления заказа, добавления в каталог и т.д. 

Для начала рассмотрим вопрос, «каким методом работают программы для рассылки спама в интернете?». Например, такие как Xrumer, AllSubmitter, SendPost, Addserv. Суть в том, что программа находя на странице форму регистрации или обратной связи заполняет все поля которые найдет, особенно имеющие атрибуты type=”name”, type=”password”, и самое главное type=”url”. Ведь как правило спамеры продвигают какой-либо интернет ресурс. Достается также полю <textarea>. 

Почему мы не рассматриваем способы защиты сайта при помощи капчи (ReCapthca, Google Captcha, формы типа «Вопрос-ответ», или других продвинутых? Потому что в данной статье предлагается простота и быстрота. К тому же средствами Xrumer (XEvil) простые варианты защиты формы сайта капчей взламываются и мы получим бесконечный поток ботов и спама. С совершенствованием защиты от спама, так-же совершенствуются способы обхода. Рассматриваемый метод защиты предлагает обман программы и отсеивание спамера по признаку.
 
Рассмотрим пример HTML код простой формы регистрации на сайте:
<form method="post" name="registration" id="registration" action="">
            <label for="name">Логин</label>
            <input type="text" name="name" id="name" class="wide" required>
 
            <label for="password1">Пароль</label>
            <input type="password" name="password1" id="password1" class="wide" required>
            
            <label for="password2">Повторите пароль</label>
            <input type="password" name="password2" id="password2" class="wide" required>
                        
            <label for="email">E-mail</label>
            <input type="email" name="email" id="email" class="wide" required>
 
            <button class="btn" name="submit" type="submit">Зарегистрироваться</button>
</form>
Если мы обрабатываем регистрацию пользователей на сайте таким способом, то мы получим массовый поток успешных регистраций ботов.
Обработка на сервере, пример:
<?php
$login = $_POST['login'];
$password = $_POST['password'];
$password = $_POST['email'];
?>
А теперь давайте вставим в форму «поле-ловушку» которое не нужно при регистрации заполнять реальным пользователем и они его не увидят. А вот программа для спама увидит, и обязательно заполнит. (Обязательно заполним атрибут type=”url”)
<label for=" url " class=”url_field”>URL адрес сайта</label>
<input type="url" name="url" id="url" class="url_field">
Пропишем стили в файл стилей CSS
.url_field {
            Display:none; /*Делаем невидимым*/
}
Обработка на сервере:
<?php
If($_POST['url_field']) {
exit(); //Если поле url_field заполнено, то прекращаем исполнение скрипта
} else {
$login = $_POST['login'];
$password = $_POST['password'];
$password = $_POST['email'];
//продолжаем исполнение скрипта
}
?>
А еще лучше для получения E-mail и логина пропишем другие значения атрибутов name="", а сами поля email и name сделаем ловушками. Данный метод явно повысит шансы отсечь ненужные регистрации на сайте.
<form method="post" name="registration" id="registration" action="">
<div class=”fake_field”><!—скрытое поле->
<label for="name">Логин</label>
            <input type="text" name="name" id="name" class="wide" required>
</div>
<label for="name">Логин</label>
            <input type="text" name="field1" id=" field1" class="wide" required>
 
<label for="password1">Пароль</label>
            <input type="password" name="password1" id="password1" class="wide" required>
 
            <label for="password2">Повторите пароль</label>
            <input type="password" name="password2" id="password2" class="wide" required>
 
<div class="fake_field"><!—скрытое поле->
            <label for="email">E-mail</label>
            <input type="email" name="email" id="email" class="wide" required>
</div>
<label for="email">E-mail</label>
            <input type="email" name="field2" id="field2" class="wide" required>
 
            <button class="btn" name="submit" type="submit">Зарегистрироваться</button>
</form>
Логин мы получим в массиве – элемент $_POST[‘field1’], а E-mail адрес соответственно в элементе $_POST['field2']. А если на сервер приедет значение $_POST[‘login’] или $_POST[‘email] – то данный запрос мы не обрабатываем.
Пропишем стили в файл стилей CSS
. fake_field {
            Display:none; /*Делаем невидимым*/
}
Обработка на сервере:
<?php
If($_POST['url_field'] or $_POST['login'] or $_POST['email']) {
        exit(); //Если поле url_field заполнено, то прекращаем исполнение скрипта
} else {
        $login = $_POST['field1']; //Логин
        $password = $_POST['password'];
        $password = $_POST['field2']; //E-mail
        //продолжаем исполнение скрипта
}
?>

Мы проверили! При автозаполнении формы пользователем, средствами браузера или например менеджером пароля Kaspersky Password Manager и других. неотображаемые поля не заполняются. Так что за реальных посетителей беспокоится не стоит.

Данный метод не дает 100% гарантии от ботов. Но отсеит 90%-95% ненужных регистраций, запросов, от таких программ как Xrumer и так называемых «мамкиных хакеров».

Похожие материалы

Комментарии (0)

Оставить комментарий

Кликните на изображение чтобы обновить код, если он неразборчив
Последние комментарии
Онлайн статистика
5 посетителей на сайте. Из них:
Гости5