Как защитить HTML-форму от спамеров? - PullRequest
13 голосов
/ 19 декабря 2010

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

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

Ответы [ 10 ]

7 голосов

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


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

Другая проблема заключается в том, что антиспам-программы не могут обнаружить спам, основанный на контексте, профессионально созданным ботом. Есть много подходов. Самый простой из них - веб-просмотр диалогов с несколькими авторами из других веб-форумов и публикация их КОНТЕКСТ-ЧУВСТВИТЕЛЬНО (боты могут определять темы) с разных IP-адресов разных стран в разное время, даже (веб-блог) владелец (человек) не может обнаружить, что диалоги публикуются ботами (они действительно хранятся в базе данных человеческих диалогов).

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

2 голосов
/ 19 декабря 2010

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

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

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

1 голос
/ 02 апреля 2011

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

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

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

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

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

1 голос
/ 19 декабря 2010

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

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

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

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

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

У этого подхода есть пара недостатков:

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

Этот вопрос много раз поднимался на этом заседании [ссылка необходима :)]

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

Я думаю, что этот сайт решает проблему довольно хорошо, но, как всегда, я предполагаю, без ужасного ущерба для удобства пользователя, вы будете использовать 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);
?>

Вы можете добавить к ней размытие по Гауссу и т. Д. И т. Д. -

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

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

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

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

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

Удачи !!

0 голосов
/ 08 декабря 2012

Вы можете сделать это без капчи, вы можете добавить скрытую форму и затем проверить, заполнена ли эта форма, которую не видят люди, вы можете сделать это с помощью 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;"/>
0 голосов
/ 05 октября 2012

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

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

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

0 голосов
/ 19 декабря 2010

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

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

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

0 голосов
/ 19 декабря 2010

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

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

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

0 голосов
/ 19 декабря 2010

Даже кодчи расшифрованы, как видно из этой статьи Джона Резига:

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

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

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

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

...