Как предотвратить спам без CAPTCHA или централизованно управляемой системы (например, akismet)

Удалось ли кому-нибудь успешно предотвратить спам на своем сайте, не обременяя вашего посетителя (например, CAPTCHA) и без использования централизованной системы сообщений о спаме (например, Akismet)

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

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

Кажется, не существует подробных инструкций / учебников о том, как реализовать такую ​​технологию.

Заявление об ограничении ответственности

Кроме того, я понимаю, что не существует серебряной пули, подходящей для предотвращения спама. Но если просто внедрить неинвазивную (невидимую для пользователя) систему предотвращения, которая блокирует более 95% спама, ее развертывание будет стоить усилий.


person TimJK    schedule 18.08.2009    source источник
comment
Здесь обсуждаются многие идеи stackoverflow.com/questions/ 8472 /   -  person skaffman    schedule 19.08.2009
comment
@skaffman, в этой статье на случай, если вы не заметили, есть ссылка в моем исходном сообщении в качестве решения. У меня вопрос в том, что не существует достаточно подробной инструкции по реализации такой технологии.   -  person TimJK    schedule 19.08.2009
comment
Справедливо. Ваш комментарий гораздо более ясен, чем ваш вопрос, в описании того, что вы на самом деле ищете - пожалуйста, подумайте о пересмотре вопроса.   -  person Rex M    schedule 19.08.2009


Ответы (10)


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

Код такой:

В скрипте, который создает сайт, содержащий форму, я реализовал:

$_SESSION['lastSiteId'] = 'something Unique';
$_SESSION['lastSiteRequest'] = time();

Сценарий, содержащий логику записи комментариев в базу данных, содержит следующее:

if($_SESSION['lastSiteId'] == 'something Unique' 
   && $_SESSION['lastSiteRequest'] + 5 < time()){

    insertComment();
}else{
    echo "Please read the article before posting a comment";
}

Помните, что это псевдокод, чтобы дать вам представление. В конце концов, вы должны реализовать это в одиночку ...;)

Все, что он делает, это проверяет, прошло ли более 5 секунд между повторным заполнением формы и отправкой запроса POST.

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

Комбинируя тесты времени с тестами javascript (если это возможно и нужно) плюс уловки с предварительно заполненными / незаполненными скрытыми полями, вы должны избавиться от спама через несколько лет.

person mondjunge    schedule 04.10.2011
comment
К тому времени, как я напишу этот комментарий, первые СПАМ-боты прошли через мой механизм предотвращения спама. Ваш сайт - честь для моих глаз. Продолжайте писать такие хорошие страницы с контентом - своего рода спам. Спам-боту потребовалось почти 2 года, чтобы отправить комментарий в мой блог, поэтому я считаю, что мой подход хорош, и его просто нужно сделать немного сильнее. - person mondjunge; 18.06.2013
comment
Мое решение заключалось в том, чтобы внести </a>, [/url] и [/link] в черный список с вежливым сообщением, чтобы переключиться на голые URL-адреса и повторно отправить. Убивает 99% спама до того, как будут запущены какие-либо другие тесты, и делает это, атакуя то, что спам-боты вряд ли изменится, потому что деоптимизирует их SEO-спам для сайтов, которые не блокируют разметку. - person ssokolow; 13.07.2019

Капча Honey Pot (статья Фила Хаака). Это обычный метод, используемый для того, чтобы сделать то, что вы ищете. Это не надежно, но что на самом деле?

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

person Matthew Vines    schedule 18.08.2009

Если бы было окончательное решение, не было бы необходимости в CAPTCHA вообще. Однако, если размер вашего сайта недостаточно велик, чтобы гарантировать, что кто-то вручную ищет способ взломать его, безопасность через скрытность может быть лучшим способом. Например, ссылка, которую вы указали выше, или так же просто, как добавление ввода с названием что-то вроде "City_2" и его скрытие. Если поле ввода заполнено, скорее всего, у вас есть спамер, поскольку он автоматически заполняет каждое поле - просто выгрузите данные и двигайтесь дальше ... Всего мои 2 цента.

person Ryan    schedule 18.08.2009
comment
Хотя решение City_2 может быть хорошим, я хотел прокомментировать, что безопасность через неизвестность - это вообще не защита. - person JasCav; 19.08.2009
comment
@Jason: Captchas как таковые - это безопасность через неясность, в буквальном смысле слова. Какой-то нечеткий (искаженный) текст нужно идентифицировать, вот и все. Нет реальной безопасности, нет скрытых частей, ранее обмениваемых секретных ключей или чего-то еще. Captcha просто немного более непонятен для машины, чем для человека, и в этом суть. - person deceze♦; 19.08.2009

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

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

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

person Jay    schedule 19.08.2009

Избавьтесь от 99% спама, см. Это - http://wordpress-plugins.feifei.us/hashcash/

Очевидно, он предотвращает только автоматический спам, используйте его вместе с Akismet или чем-то еще и получите 100% защиту.

Обновление: как работает HashCash? Спам ничего не стоит (с использованием ботнетов бесплатно), поэтому он работает. Идея состоит в том, что если этот процесс можно сделать дорогим (CPU), то массовая рассылка спама / сообщений не будет работать. Более подробная информация здесь - http://en.wikipedia.org/wiki/Hashcash.

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

person Arpit Tambi    schedule 19.08.2009
comment
Мне непонятно, как работает HashCash. Вы не против уточнить? - person TimJK; 19.08.2009

Это очень хорошее рабочее решение, я использую его в своих проектах.

Стоит попробовать...

person astropanic    schedule 18.08.2009
comment
Это похоже на централизованно управляемую службу, которая помечает мои комментарии как спам или нет. Я бы предпочел, чтобы все было локально в моей системе, а не полагаться на сторонних разработчиков. Спасибо хоть - person TimJK; 19.08.2009

Я использую Akismet, который на самом деле очень похож на фильтр спама в электронной почте, но довольно мощный, поскольку он постоянно создает байесовский профиль с совокупным спамом каждого сайта, использующего сервис (около 18 миллионов комментариев в день). Их веб-сервис чрезвычайно прост и очень быстр - просто отправьте комментарий по сети, и они отправят ответ «спам» или «не спам». Существуют существующие библиотеки Akismet почти для каждой платформы.

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

person Rex M    schedule 18.08.2009
comment
Я изменил свой вопрос, пожалуйста, без централизованной системы управления спамом. (Не хочу полагаться на третьих лиц) - person TimJK; 19.08.2009

Общий комментарий о любой системе защиты от спама: ничто из того, что вы делаете, не будет на 100% безопасным. Если ваш сайт достаточно велик или полезен, чтобы спамер решил уделить особое внимание его взлому, он, вероятно, найдет способ. Но это то же самое, что обычно говорят о домашней безопасности: конечно, опытный и профессиональный вор может обыграть любую сигнализацию, которую средний домовладелец может себе позволить. Но вы будете держаться подальше от неуклюжих любителей, и если вы создадите достаточно проблем для профессионала, вы увеличите для него риск того, что к тому времени, когда он сломает его, вы вернетесь домой или сосед увидит его и позвонит в службу поддержки. полиция. Когда я работал в вооруженных силах, мы обычно говорили о балансе между безопасностью и запретом законным пользователям выполнять свою работу. Цель в вооруженных силах - не какая-то гипотетическая «абсолютная безопасность», а скорее нечто достаточно хорошее, чтобы снизить риск до «приемлемого уровня», совместимого с минимальными неудобствами для уполномоченных лиц. Очевидно, что то, что считать «приемлемым», зависит от того, что вы защищаете: я определенно надеюсь, что люди, которые защищали ядерные боеголовки, настаивали на более высоком уровне безопасности, чем мы обеспечиваем радиолокационные системы. Люди в районах, где предполагалось нападение, например, на базах на Ближнем Востоке, имели более высокий уровень безопасности, чем у нас на базах в Центральной Америке. И Т. Д.

Дело в том, насколько вероятна цель вашего сайта? Я определенно надеюсь, что мой банк использует более строгие меры безопасности для защиты моих денег, чем я стараюсь использовать для предотвращения рассылки спам-аннотаций на сайте конвенции, которую я запускаю. Сайты, которые имеют миллионы посетителей и хорошо известны, вероятно, нуждаются в большей безопасности, чем малоизвестные сайты с тысячами или сотнями посетителей. Насколько "достаточно хорошо"?

person Jay    schedule 19.08.2009

В вашей форме (комментарии или также контактная форма) вы должны добавить скрытый ввод

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

и напишите немного php, чтобы проверить, заполнен ли этот ввод, поэтому с выбором 'if than else' вы можете контролировать

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

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

person Mitro    schedule 08.12.2012

Задайте пользователям простую случайную математическую задачу. Если они его решат, они увидят кнопку отправки. В противном случае они этого не делают. Это работает и на статических сайтах.

Это проблемная группа ввода

<div class="input-group">
  <input type="text" value="" id="testInput" class="form-control">
  <span class="input-group-btn">
  <button class="btn btn-default" type="button" id="mathTest">Go!</button>
</span>
</div>

Вот сценарий, который генерирует и проверяет проблему.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" src="https://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.js"></script>

< script > jQuery(function($) {
    $("#wj-form").validate();
    var rnuma = Math.floor(Math.random() * 11);
    var rnumb = Math.floor(Math.random() * 11);
    var sum = rnuma + rnumb;
    $("#rnuma").text(rnuma);
    $("#rnumb").text(rnumb);
    $("#mathTest").click(function() {
        if (sum == $("#testInput").val()) {
            $("#wj-form").append('<div class="form-group"><input type="submit" value="Send Message" class="btn btn-primary"></div>');
        } else {
            alert('Sorry, please try again.');
        }
    });
}); < /script>

Приведенный выше сценарий делает именно это. Убедитесь, что вы не добавили кнопку отправки в форму. Его следует добавлять только после того, как проблема будет решена. Я реализовал это здесь. Убедитесь, что вы используете правильную форму id, как указано в сценарии.

Однако есть один нюанс. Уловка не сработает, если в браузере пользователя не запущен javascript.

person Sharath kumar    schedule 15.01.2019