Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Форма с защитой от спама на PHP без картинки
Создавая черный список сайтов, я по старинке опять на форму хотел добавлять каптчу....
Как же мне надоело вводить всевозможные цифры, буквы, слова и результаты сложения и вычитания. Если Вы со мной согласны, то давайте сделаем этот мир лучше, но не в ущерб безопасности.
Итак, рассмотрим ситуацию вечной борьбы спамера и пользователя. Как защититься от одного и не навредить второму?
И тут возникла мысль... ведь спам рассылают роботы, которые "не держат сессию"! Выход найден! Все, что требуется: у пользователя должен быть включен javascript и он должен принимать куки.
<?
session_start();
if(!isset($_SESSION['add'])) {
$_SESSION['add']=rand(1000,999999);
if(isset($_POST['add']))
die('Разрешите куки, иначе вы не сможете добавить объявление!');
}
if(isset($_POST['add'])){
if (intval($_POST['add'])!=intval(@$_SESSION['add'])){
// ставлю новое значение, чтоб не спамили перебором
$_SESSION['add']=rand(1000,999999);
die('Разрешите javascript и куки, иначе Вы не сможете добавить информацию!');
}else{
// здесь спокойно пишу данные в базу
}
}
?>
<p>Форма отправки, из которой я удалил лишнее:</p>
<form name='form' method='post'>
icq: <input type=text name="icq" size=15><br>
<input type="hidden" name="add" value="<?=$_SESSION['add'] ?>">
<INPUT TYPE="SUBMIT" value="Добавить сайт в черный список" /><br>
</form>
?>
Я устанавливаю сессионную переменную в случайное число и отправляю его пользователю в скрытом поле формы. На период этой сессии число остается постоянным, даже если пользователь откроет страницу в другом окне.
При получении формы проверяется, соответствует ли переданная переменная той, которая стоит в сессии этого пользователя. Если нет, то можно или сразу отправить спамера на порно-сайт или культурно предположить, что это пользователь с выключенным javascript или куки.
В качестве дальнейшего усложнения, можно переменную инициализировать правильным значением из Javascript. А изначально присваивать неверное значение. Это на случай, если спамер будет сохранять сессию, но не поддерживать javascript.
Вас заинтересует:
.
Прокомментировать/Отблагодарить