php антиспам на форму скрытое поле

Защита формы обратной связи от спама на PHP и JavaScript

php антиспам на форму скрытое поле. Смотреть фото php антиспам на форму скрытое поле. Смотреть картинку php антиспам на форму скрытое поле. Картинка про php антиспам на форму скрытое поле. Фото php антиспам на форму скрытое поле

Всем привет. Если вы читаете эту статью, то вероятнее всего столкнулись с проблемой, которая выражается в виде спама через форму обратной связи на сайте. К сожалению спама меньше не становится и нужно от этого как-то защищаться. Способы существуют, их несколько, но мы рассмотрим один, на мой взгляд весьма эффективный. Сразу скажу, что не будем привязываться к какому-то конкретному движку, сделаем все своими руками. Прежде, чем писать защиту формы от спама, следует отметить, что в большинстве случаев спам приходит автоматический, это так называемые спам-боты, которые рассылают сообщения на тысячи сайтов. Сканируется сайт на наличие формы обратной связи и если она есть, поля заполняются и тут же идет отправка.

Защита формы от спама. Теория

Что бы будем делать?

Как правило боты не делают нажатие на кнопку отправки и это легко проверить, установив в Яндекс Метрике соответствующие цели. Поэтому такой способ должен защитить сайт от спама если не совсем, то ограничить его поступление до минимума. То есть будут приходить сообщения только если живой человек отправит форму самостоятельно, то есть нажмет на кнопку. Итак, приступим. Добавляем в форму скрытое поле:

Защита контактной формы от спама. Практика

В JavaScript пишем следующее:

let code = document.querySelector(‘#code’); // Получаем скрытый input document.querySelector(‘.btn’).onclick = function()< // Клик по кнопке отправки code.value = 'NOSPAM'; // Подставляем значение в value инпута >;

После клика скрытое поле будет выглядеть примерно так:

Теперь сделаем проверку на PHP.

На этом защиту от спама можно было бы завершить, но как быть с движками типа WordPress? Для CMS существует огромное количество плагинов по защите от различного рода взломов, атак и спама, но при желании можно внедрить и этот способ, но это тема для отдельной статьи или целого видео-урока. Возможно в ближайшее время я выпущу материал на эту тему. А какие способы защиты от спама знаете вы?

Читайте также:

Интересно, есть-ли у Вас на сайте пример создания ФОС для установки на HTML страницу?

Пока нет. А что это?

Форма обратной связи для заинтересованного посетителя с возможностью обратного звонка. В сети есть примеры платные и бесплатные, рабочие и не рабочие — устаревшие.Часто на одностраничниках, и на моей странице тоже стоят такие ФОС. Хотелость бы иметь современную ФОС без использования БД.

Особенно интересно создать скрипт комментариев с возможностью редакции на таком же одностраничнике. В сети есть аналог такого комментария, но всего ОДИН!

Привлекать сторонние сервисы со своими скриптами, это их реклама и потеря веса. Хотя, я пользуюсь и этим на своих одностраничниках.

Всё дело в том, что ряд моих страниц уже несколько лет стоят в топ 10 по вч запросам и это ощутимо в вопросах бизнеса. В Google, клиенты, не смотря на раздел МОЙ БИЗНЕС, не проявляют желания писать отзывы. Да, и не умеют. А тут же на странице — пожалуйста. Но нет такой возможности.

Отзывы можно реализовать по принципу гостевой книги.

Интересное решение. Учитывая, что на моей странице 80 000 знаков как бы защитится от текстовых ботов на всякий случай. У Вас была публикация по ограничению по буквам записей на JS.

Видимо я и запомнил вашу эту публикацию, что она одна в инете. Спасибо за ваши практики.

От ботов ограничение на JS не спасет. Попробуйте такой вариант.

Спасибо. Буду интепретировать.

о) написал огромный коммент со своим вариантом защиты от ботов, и ничего не опубликовалось. Ладно!

Там ссылка была. Автоматом в спам ушло.

когда создавал защиту от ботов на своем сайте, то использовал следующий алгоритм. Язык PHP.

1. Список 1. Массив со списком HTML сущностей, которых легче всего можно спрятать в токене из рандомных символов.
2. Список 2. Массив со списком декодированных HTML сущностей из списка 1.
3. При открытии страницы формируется рандомный токен из символов »&;0123456789&;abcdefghijklmnopqrstuvwxyz&;ABCDEFGHIJKLMNOPQRSTUVWXYZ&;()#%», я использовал сложность 50, т.е. строка на 50 символов.
4. Выбираем случайный элемент из списка 1, и заменяем им случайный символ из токена, предварительно сохранив в сессию НОМЕР_СТРОКИ в токене, в которую мы поместили HTML сущность и НОМЕР_ЭЛЕМЕНТА в массиве списка 1.
5. Помещаем полученный токен в форму на странице.
6. После того, как мы получили токен от формы, получаем соответствующий символ из токена по НОМЕРУ_СТРОКИ и сравниваем его с элементом из списка 2 по НОМЕРУ_ЭЛЕМЕНТА
7. Если они совпадают, значит, форма отправлена человеком.
8. Если нет, значит, форма отправлена роботом.
Принцип защиты основан на том, что браузер всегда декодирует HTML сущности, и одна и та же HTML сущность будет иметь разный вид, в зависимости от того, получена она от браузера или от бота, не использующего браузер.
Пример:
& iexcl; = Бот отправит этот код как есть, состоящий из 7 символов.
¡ = человек отправит этот же код в таком виде.

Токен в 50 символов используется, чтобы не было очевидно, что защита основана на принципе отображения браузером HTML сущностей.
Реализовывал эту защиту на разных сайтах, которые жаловались на спам, и хотели защиту без капчи, включая свой собственный сайт. Ни разу боты не прошли эту защиту.

Источник

Методы защиты веб-формы без капчи

О чём речь?

В последнее время на Хабре было предложено довольно много идей для капчи. Сложная, умная, смешная, капча остаётся одним из основных способов защиты формы от ботов.

Однако, одновременно с этим, капча является проблемой юзабилити, поскольку заставляет пользователя выполнять лишнее действие.

В этом обзорном посте я бы хотел рассмотреть незаметные для пользователя методы защиты от ботов.

Методы защиты

Минимальное время заполнения формы

Суть метода заключается в том, что сервер замечает время создания формы. Если пользователь заполнил форму меньше чем за определённое время, то он считается ботом. Время можно варьировать в зависимости от сложности формы.
Верно также, что если форма не была заполнена слишком долго, то что-то не так.

Скрытое поле

Этот метод может показаться странным, но он, похоже, работает. К форме добавляется скрытое поле (скрытое в смысле display:none ). Если поле заполнено, то пользователь считается ботом.
Удивительно, но многие простенькие боты заполняют все неизвестные поля.

Обфускация или шифрование HTML

Методы шифрования могут варьироваться от простого эскейпирования значений буковок (буква превращается ‘%код’ ) до некоторых алгоритмов шифрования (например, простенький XOR).
В интернете есть много готовых решений, например, вот тут.

Блокирование определённых user-agent

Некоторые боты используют весьма специфические заголовки user-agent. Можно блокировать запросы не содержащие user-agent вообще или содержащие заведомо плохой заголовок.

В интернете есть списки таких заголовков. Вот, например, от некого Нила Гантона.

«Ловушка» для ботов

Суть этого метода заключается в создании специального раздела сайта вроде «/bot/guestbook». Ссылка на этот раздел не видна для пользователя, однако если бот зайдёт в этот раздел и сделает там хоть что-нибудь, то его IP тут же блокируется.
Раздел должен содержать лакомые для бота слова вроде «email», «submit», «add comment» и тому подобные. Файл «robots.txt» предупреждает хороших ботов.

Хеширование формы (BarsMonster)

При сабмите формы на сервер вычисляется хеш полей формы и добавляется в одно из специальных скрытых полей. Сервер проверяет значение хеша.

Использование прозрачных кнопок (BarsMonster)
Динамическое создание формы (maxshopen)

Сама форма полностью создаётся javascript-методом динамчески. Таким образом, форму может увидить лишь пользователь, у которого отработал соответствующий скрипт.

Использование сторонних сервисов (le0pard)

Можно туннелировать трафик через специальный сервис, предназначенный для анализа контента на спам. Примером такого сервиса может быть Akismet

Гибридный подход

По умолчанию форма защищена каким-либо javascript-методом (динамическое создание формы или шифрование данных) или методом из приведённых выше. Если форма была засабмичена некорректно, то возвращается ошибка и просьба заполнить не очень простую капчу.

Важные замечания

Раз. Приведённые выше методы не являются универсальной защитой от ботов. Они не спасут от прямой атаки, но смогут помочь от ботов-пауков.

Два. Пост не рассматривает слабые стороны методов. Это можно обсудить в комментариях.

Три. Заинтересовавшимся рекомендую почитать пост некого Нила Гантона (на английском).

UPD: Добавил несколько методов из комментариев. Спасибо, BarsMonster.

UPD2: Добавил ещё один метод из комментариев.
Спасибо, maxshopen, за отличную критику методов.

UPD3: Добавил ещё один метод из комментариев. Спасибо, maxshopen.

UPD4: Добавил ещё один метод из комментариев. Спасибо, le0pard.
mprokopov кинул ссылку на спам-блок плагин для рельсов: snook

Заключение

Увы, мне удалось найти не так много методов защиты веб-форм.

А какие ещё безкапчевые методы защиты вы знаете?

Источник

Простой метод защиты веб-форм от спам-ботов без использования каптчи

Simple method to protect web-form from spam bot without captcha

Традиционным способом получения обратной связи в сети Интернет является использование веб-форм. Однако, их широкое распространение, удобство и лёгкость встраивания на сайт, привели к тому, что веб-формы стали использоваться многочисленными спам-ботами для рассылки нежелательных рекламных сообщений.

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

Ожидаемо, использование каптчи привело к разраотке многочисленных способов обхода и систем автоматизированного распознования для получения правильных ответов, что снизило надёжность данного метода. Другим, и, как я считаю, большим недостатком использования каптчи является её избыточность, поскольку, во-первых, сама информация, которую пользователь должен ввести для прохождения теста, не имеет отношения непосредственно к передаваемой информации, а, во-вторых, эти системы могут быть сложны, что не даёт возможности человеку с первого раза пройти тест, что резко снижает эффективность использования веб-форм, а также может формировать у отправителя негативные эмоции.

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

1. Методика распознования ввода человеком

Главный вопрос в поставленной проблеме это способ отличить ввод информации в форму человеком от машинной отправки. Человек, в отличие от ботов, всегда вводит информацию в форму с клавиатуры. Исключение может составлять, пожалуй, лишь система автопозаполнения типовых полей, которую предлагают все современные браузеры.

Если рассмотреть типовую веб-форму, то в ней можно увидеть четыре основных поля для ввода контактной информации: имя, контактый e-mail, телефон, и, собственно, сам текст, который и является сутью обращения.

Простейшим способом для отслеживания является подсчёт числа нажатий на клавиши и сравнение данного подсчёта с реальной длинной текста переданного через отслеживаемое поле формы. Причём делать эту проверку следует на серверной части кода сайта, который обрабатывает данную веб-форму. В приведённом примере это скрипт mail.php.

2. Код проверки

Javascript, который является стандартным средством на стороне браузера клиента, даёт широкий набор инструментов по обработке событий клавиатуры на данной веб странице. Воспользуемся методом onkeyup для отслеживания нажатий, повесив на него функцию подсчёта их количества. Поле приобретёт вид.

Далее напишем простой скрипт для обработки, не забыв при этом, что нам будет необходимо передавать и сам результат подсчёта. Для этого лучше всего будет воспользоваться скрытым полем input. В целях ввести в заблуждение анализаторы HTML-кода, которые используют спам-боты, это поле не будет сразу добавлено на страницу в ходе вёрстки, а будет сгенерированно при помощи того же Javascript при её загрузке. Для этого разместим следующий код ближе к концу страницы, поместив туда и саму функцию подсчёта нажатий клавиш.

Здесь в секции инициализации обнуляется счётчик с именем ct, далее создаётся скрытое поле с именем count и описывается функция подсчёта countme(), которая будет увеличивать счётчик на единицу и подставлять его значение в поле value только что созданного скрытого поля.

Хорошим тоном будет также предварительно проверить наличие в передаваемой формой набора данных значения из созданного скрытого поля count, к примеру PHP функцией isset($_POST[‘count’]), что позволить отсеять боты попавшиеся в ловушку с его динамическим добавлением.

Дополнение. В ходе опытной эксплуатации было выявлено ограничение данного метода, связанное с функцией автоподстановки слов в устройствах с тач-экраном. В этом случае проверенные системы эмулируют меньшее количество событий «нажатие на клавишу», чем будет содержать набранный текст. Поэтому лучшим вариантом будет использование PHP функции str_word_count() вместо strlen() не забыв, при этом, изменить равенство в нужную сторону. Таким образом с количеством нажатий клавиш будет сравниваться не количество символов в отправленном тексте, а количество слов, которое будет однозначно меньше счётчика. Надёжность защиты от ботов же при этом ничуть не пострадает.

3. PROFIT!

Статья была полезной? Тогда прошу не стесняться и поддерживать деньгами через PayPal или Яндекс.Деньги.

Источник

Защищаем веб-формы от спама без CAPTCHA — 2: Ботобор

Три года назад на Хабре была опубликована статья «Form Spam Bot Blocker: Защищаем Web-формы без CAPTCHA!», рассказывающая о принципиально отличном от CAPTCHA решении для PHP по защите форм от спам-ботов. Это решение основано на идеях, изложенных в своих статьях Филом Хааком (Phil Haack) — Honeypot Captcha и Недом Батчелдером (Ned Batchelder) — Stopping spambots with hashes and honeypots. К сожалению, предложенный в статье класс, написан для PHP4 и не развивается с 2007-го года. Хочу предложить вашему вниманию его аналог на PHP5.

Ботобор

Ботобор — библиотека, написанная на PHP 5.0, предназначенная для защиты от заполнения веб-форм роботами. Используемые ей методы, незаметны для посетителей-людей.

Для выявления роботов Ботобор использует следующие проверки:

По умолчанию используются все проверки, но у разработчика есть возможность отключать любые из них.

Примеры

Простой пример

Фрагмент кода, обрабатывающего данные формы:

require ‘botobor.php’ ;

if ( Botobor_Keeper :: isHuman ( ) )
<
// Форма отправлена человеком, можно обрабатывать её.
>

Пример настройки формы

В остальном всё также как и в первом примере.

Что у ней внутре?

Что делает Ботбор с кодом формы

, содержащий input[type=hidden] с мета-данными формы. Эти мета-данные хранят подписанную информацию о времени создания формы, установленных опциях и т. д. В этот же скрытый блок Ботобор может вставлять поля-приманки.

Поля-приманки

Поля-приманки предназначены для отлова роботов-пауков, которые находят формы самостоятельно. Такие роботы, как правило, ищут в форме знакомые поля (например, name) и заполняют их. Ботобор может добавить в форму скрытые от человека (при помощи CSS) поля с такими именами. Человек оставит эти поля пустыми (т. к. просто не увидит), а робот заполнит и тем самым выдаст себя.

По умолчанию в коде формы ищутся поля с любым из следующих имён: «name», «mail», «email» (список настраивается). У каждого найденного поля имя меняется на сгенерированную случайным образом комбинацию символов и создаётся скрытое средствами CSS поле с оригинальным именем.

Обратное преобразование имён будет сделано во время вызова метода Botobor_Keeper::handleRequest() или Botobor_Keeper::isHuman().

Источник

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

Есть сайт.
На нём 17 форм обратной связи. Все формы имеют одинаковый обработчик, за исключением небольших отличий.

Письма спама, имеют такой вид :

Благодарю за помощь!

php антиспам на форму скрытое поле. Смотреть фото php антиспам на форму скрытое поле. Смотреть картинку php антиспам на форму скрытое поле. Картинка про php антиспам на форму скрытое поле. Фото php антиспам на форму скрытое поле

php антиспам на форму скрытое поле. Смотреть фото php антиспам на форму скрытое поле. Смотреть картинку php антиспам на форму скрытое поле. Картинка про php антиспам на форму скрытое поле. Фото php антиспам на форму скрытое поле

php антиспам на форму скрытое поле. Смотреть фото php антиспам на форму скрытое поле. Смотреть картинку php антиспам на форму скрытое поле. Картинка про php антиспам на форму скрытое поле. Фото php антиспам на форму скрытое поле

Решил проблему таким способом :
В форму добавил поле

Потом в кнопку, через которую идёт отправка, добавил

Вышло что-то вроде этого

И в php-обработчике, добавил это

Возможно кому-то поможет.
Удачи!

php антиспам на форму скрытое поле. Смотреть фото php антиспам на форму скрытое поле. Смотреть картинку php антиспам на форму скрытое поле. Картинка про php антиспам на форму скрытое поле. Фото php антиспам на форму скрытое поле

php антиспам на форму скрытое поле. Смотреть фото php антиспам на форму скрытое поле. Смотреть картинку php антиспам на форму скрытое поле. Картинка про php антиспам на форму скрытое поле. Фото php антиспам на форму скрытое поле

Alexey_R88, У вас одна форма или несколько?
Если несколько, то обратите внимание, что проверка идёт по ID, и с одной формы может всё прекрасно отправляться, а с другой выскакивать «Spam decected».

Вот доработанный вариант с более удобной проверкой по классу :

php антиспам на форму скрытое поле. Смотреть фото php антиспам на форму скрытое поле. Смотреть картинку php антиспам на форму скрытое поле. Картинка про php антиспам на форму скрытое поле. Фото php антиспам на форму скрытое поле

php антиспам на форму скрытое поле. Смотреть фото php антиспам на форму скрытое поле. Смотреть картинку php антиспам на форму скрытое поле. Картинка про php антиспам на форму скрытое поле. Фото php антиспам на форму скрытое поле

Zakonoposlushniy,
помогите, никак не могу понять, куда вставлять это:

var buttons = document.getElementsByClassName(«Здесь пишем класс кнопки»);
for (var i =0;i buttons[i].onclick = handler;
>
>)();

я так понял в файл с формой, но в какое место и в каких тэгах?
попробовал вставить в тэгах скрипт текст/яваскрипт внутри формы в конце и пробовал также сразу после нее, но не заработало.

и подскажите логику работы этого всего.

я правильно понял, что
1. по-умолчанию заполняю скрытое поле чек каким-то любым словом на свое усмотрение, или оставляю пустым.
2. дальше яваскрипт отслеживает нажати кнопки отправки формы и в этот момент вписывает в значение value скрытого поля кодовое слово по моему усмотрению
3. обработчик проверяет поменял ли бот слово ф скрытом поле на кодовое и если он слал через метод пост без браузера, то скорее всего не поменял и соответственно детектируем бот.
4. если же оно заполнено кодовым словом, то видимо человек постил через браузер, так как сработал наш яваскрипт по замене на кодовое слово по нажатии кнопки

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *