Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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


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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

Как вопрос проверки мата, я пробовал себя в 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);
?>

Вы можете добавить gaussian blur к нему и т.д. и т.д. -

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

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

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

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

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

Удачи!

Ответ 4

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

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

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

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

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

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

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

Ответ 5

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

Что я делаю:

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

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

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

Ответ 6

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

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

И также существуют онлайн-инструменты.

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

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

Ответ 7

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

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

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

Ответ 8

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

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

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

Ответ 9

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

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

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

Ответ 10

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

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

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

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

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