В данной статье рассмотрим один из самых эффективных вариантов защиты формы сайта от спама. Данный код применим как к форме регистрации, авторизации, обратной связи, поля оформления заказа, добавления в каталог и т.д.
Для начала рассмотрим вопрос, «каким методом работают программы для рассылки спама в интернете?». Например, такие как 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 и так называемых «мамкиных хакеров».