Как защитить форму html от спамеров?

У меня возникают проблемы со спамом в моей базе данных через форму регистрации. Я пробовал много решений Captcha с открытым кодом, но все равно сталкивался с такой же проблемой.

Поэтому я ищу альтернативное решение. Как насчет решения, где пользователи должны будут ввести ответ на вопрос? Ответ на вопрос будет конкретным словом на стороне сервера, и это наверняка победит спамбот?

Было бы лучше иметь серию простых рандомизированных вопросов или что-то вроде «6 +? = 9» лучше в качестве вопроса? Единственное, что касается меня, это то, что, если это так просто, как это, чтобы защитить регистрацию, то почему не такой большой гигант, как Facebook, делающий это?

Обновление: ответ был принят, потому что я рекомендовал KeyCAPTCHA. Из моего тяжелозахваченного мучительного опыта KeyCAPTCHA – это мошенничество со стороны профессиональных спамеров . Я удалил свои рекомендации KeyCAPTCHA


Обратите внимание, что большинство профессиональных спам-ботов интегрированы с потогонным цехом (1 доллар США 1000 решений) API человеческих капчей . Когда спамбот не может передать captcha сам (спам-бот), сохраняя сотни открытых соединений, отправляет скриншот (или код веб-страницы) с CAPTCHA для решения человеком потогонной. Это законный и крупный бизнес. Чтобы быть законным и интегрироваться с ботами через API, человеческие решатели не могут напрямую взаимодействовать со взломанными веб-досками (комментарии в блогах, страницы регистрации, чаты, вики, форумы и т. Д.).

Другая проблема заключается в том, что программы защиты от нежелательной почты не могут обнаруживать спам-запросы, основанные на контекстах, профессионально созданным ботом. Существует много подходов. Самый простой из них – это веб-скремблирование человеческих диалогов с несколькими авторами с других веб-плат и размещение их CONTEXT-SENSITIVELY (боты могут обнаруживать темы) с разных IP-адресов разных стран в разное время, поэтому даже владелец веб-сайта (человек) не может обнаружить эти диалоги публикуются ботами (они действительно хранятся в диалоговых окнах базы данных).

Это только вопрос, представляющий интерес для вашего сайта от профессиональных спамеров или время + квалифицированное постоянство любителей, чтобы автоматически обойти большинство (если не всех) CAPTCHA .

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

Если это для формы регистрации, я думаю, что лучше всего иметь ссылку подтверждения CAPTCHA +, отправленную по электронной почте (и исключить фиктивные адреса электронной почты, такие как mailinator). Вы можете периодически очищать БД от неподтвержденных регистраций.

Конечно, нет 100% безопасного метода, любая форма CAPTCHA может быть обойдена (учитывая достаточное количество времени и ресурсов), поэтому, я думаю, мы должны жить с этим.

Этот вопрос много раз возникал на этом сите [ссылка нужна :)]

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

Я думаю, что этот сайт достаточно хорошо решает проблему, но, как я полагаю, без ущерба для удобства использования пользователя вы будете использовать CAPTCHA. Чем больше вы используете его, тем меньше спама вы получите, но по цене помните, что всегда существует ограничение на ограничение по IP, когда определенный IP-адрес вовлечен в подозрительную деятельность.

Поскольку для проверки вопроса mat, я сделал som, пытающийся себя в PHP, он выглядит примерно так:

<?php $x = mt_rand(1,5); $y = mt_rand(1,5); function add($x, $y) { return $x + $y; } function subtract($x, $y) { return $x - $y; } function multiply($x, $y) { return $x * $y; } $operators = array( 'add', 'subtract', 'multiply' ); $rdno = $operators[array_rand($operators)]; $result = call_user_func_array($rdno, array($x, $y)); session_start(); $_SESSION['res'] = $result; if ($rdno == "add") { $whato = "+"; }elseif ($rdno == "subtract") { $whato = "-"; } else { $whato = "*"; } $output = $x . $whato . $y . " = "; $_SESSION['out'] = $output; ?> <img src="image.php" /> <form name="input" action="check.php" method="post"> <input type="text" name="result" /> <input type="submit" value="Check" /> </form> 

chech.php:

 <?php session_start(); if($_SESSION['res'] == $_POST["result"]){ echo "correct!"; $_MCAPTCHA = TRUE; }else{ echo "incorrect"; $_MCAPTCHA = FALSE; } session_unset(); ?> 

а также

 <?php session_start(); //image creation // Create a 100*30 image $im = imagecreate(100, 30); // White background and blue text $bg = imagecolorallocate($im, 255, 255, 255); $textcolor = imagecolorallocate($im, 0, 0, 255); // Write the string at the top left imagestring($im, 5, 0, 0, $_SESSION['out'], $textcolor); // Output the image header('Content-type: image/png'); imagepng($im); imagedestroy($im); ?> 

Вы можете добавить к нему гауссовское размытие и т. Д.

Конечно, это только пример (НЕ ИСПОЛЬЗУЙТЕ ЭТО:))

Но это просто идея о том, что можно сделать.

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

Подводя итог, ИМХО, вы застряли с обычным объявлением, придется жить с НЕКОТОРЫМ спамом, это просто компромисс, с которым вам, возможно, придется жить.

Вы можете исправить статью Джеффа из ужаса кодирования, очень интересную.

Удачи!!

У меня возникают проблемы со спамом в моей базе данных через форму регистрации. Я пробовал много решений Captcha с открытым кодом, но все равно сталкивался с такой же проблемой.

Какую спам-защиту вы используете. Мне странно, что спам-защита не работает (полностью). Как и многие другие люди говорят, что recaptcha довольно хорошо, и многие крупные игроки используют их (Think Twitter).

Вы можете, например, сделать регистрацию, используя recaptcha. Затем убедитесь, что пользователь не публикует спам, проверив несколько (первый) пост для спама, используя akismet wordpress. Это должно помочь вам еще больше обнаружить спам.

Тогда снова полностью победить спам действительно сложно. Почти невозможно полностью победить спам. Я где-то читал, что некоторые спамеры даже нанимают людей из Индии дешево, чтобы нарушить защиту от спама.

Было бы лучше иметь серию простых рандомизированных вопросов или что-то вроде «6 +? = 9» лучше в качестве вопроса? Единственное, что касается меня, это то, что, если это так просто, как это, чтобы защитить регистрацию, то почему не такой большой гигант, как Facebook, делающий это?

Этот подход имеет несколько недостатков:

  • Эта логика легко может быть встроена внутри спамбота. Я даже мог написать код, который победит 6 + ? = 9 6 + ? = 9 без каких-либо усилий.
  • Некоторые пользователи могут быть плохими (действительно) в математике или не знают ответа на ваш вопрос.

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

Что я делаю, так это:

  1. Ввести некоторую константу в виде соли. Эта константа уникальна для вашего сайта, и это должно быть секретом.
  2. Используйте удаленный IP-адрес, пользовательский агент, час дня (обратите внимание, что это может привести к сбою, если час переключается между запросом и отправкой формы) и аналогичные данные для расчета солевого хеша (MD5, SHA1) … другой вход это исходное имя поля элемента форума (например, email , name , …), так что каждое имя поля теперь вычисляется на каждого клиента. Я добавляю письмо или подобное, чтобы убедиться, что имя не начинается с цифры, что может вызвать проблемы.
  3. Пользователь отправляет форму.
  4. Сценарий приема имеет одинаковые входные данные (т. Е. Его не нужно отправлять через форму или так).
  5. После того, как сценарий получения использует тот же метод, что и в 2., он может оценить данные формы и принять соответствующие меры.

Опять же, это можно комбинировать с другими средствами. Но уникальная соль позволит широко использовать ее – разные значения соли делают невозможным предсказать название поля легко, даже если известен метод вычисления хеша. Другие средства должны использоваться для маскировки соответствующих элементов ввода формы, если спамеры получают умные, хотя (т. Е. Если они не просто ищут имя поля).

Он прост, совместим со 100% совместимым с экрана (т. Е. Используется даже для слепых) и произвел чудеса для меня. Он значительно сократил спам на форуме, который я управляю. Надеюсь, это вам тоже поможет.

Даже captchas декодируются, как видно из этой статьи Джона Ресига:

OCR и нейронные сети в JavaScript

И есть онлайн-инструменты.

Сказав это, популярное решение reCAPTCHA Google, похоже, хорошо подходит для тех, которые используются на этом сайте.

С другой стороны, всегда есть возможность умеренности.

Вы уже пробовали reCAPTCHA ?

Там уже много спамботов, которые могут решать простые математические вопросы.

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

Вы уверены, что не можете использовать reCAPTCHA ? Я думаю, что это лучший капчу в Интернете прямо сейчас.

Но я подумал о совершенно другом подходе к проблеме, который, возможно, стоит попробовать.

Вы можете оседлать Google, Twitter, Facebook и другие проблемы, используя OpenID для регистрации. Таким образом, спамеры должны иметь учетную запись Google, например. Я уверен, что они не будут спамить.

Я только что закончил перенос превосходного CFFormProtect Джейком Мансоном на PHP. Он размещен по адресу http://code.google.com/p/phpformprotect/.

Он использует комбинацию тестов, в том числе проверки на основе javascript для движения мыши, использования клавиатуры и времени, затраченного на ее заполнение, а также некоторые основные проверки URL-адресов, спам-слов и дополнительной интеграции с Akismet и Project Honey Pot . Я обнаружил, что это отличный сдерживающий фактор, который почти полностью невидим для законных пользователей.

Я уверен, что порт нуждается в работе, но он работает для меня. Не стесняйтесь вносить что-либо.

Вы можете сделать это без капчей, вы можете добавить скрытую форму и проверить, заполнена ли эта форма, которую люди не видят, вы можете сделать это с помощью php

 if($_POST['hidden_input'] != ""){ echo('<p>You are a spam bot</p>'); } 

Это потому, что spambot обычно заполняет каждую текстовую область.

В форме вы должны добавить только

  <input type="text" id="hidden_input" name="hidden_input" style="display:none;"/>