Как остановить спам в node.js & amp; koa2 [дубликат]

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

  var myarr = [{somfield1: 'x', somefield2: 'y'}, {somfield1: 'a  ', somefield2:' b '}, {somfield1:' i ', somefield2:' j '}];   

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

31
задан BillK 9 February 2010 в 17:04
поделиться

13 ответов

#sec {
  visibility: hidden;
  padding: 0;
  margin: 0;
  height: 1;
}
<form method="POST" action="www.google.com">
  NAME
  <input type='text' name='name' />
  <br /> EMAIL
  <input type='text' name='email' />
  <br /> MESSAGE
  <textarea name='message' /></textarea>
  <br />
  <input type='text' name='security' id='sec' placeholder="Do not enter anything here" />
  <input type='submit' formaction="" />
</form>

** Здесь только пользователь, который нажимает кнопку отправки, может отправить форму. использование автоматической отправки просто перенаправляет бота на google.com. **

* Также ввод «безопасность» является полем ввода, которое скрыто для пользователей и видимым для определенных ботов, обычно известных как HoneyPot Captcha. На стороне сервера вы можете просто пропустить все запросы с заполненным полем «безопасность». Не каждый бот может быть обманут таким образом, и именно здесь вступает в игру атрибут formaction *

0
ответ дан atj4me 17 August 2018 в 11:17
поделиться

Если вы хотите сделать полностью входное решение, у меня был успех недавно, оставив атрибут действия формы пустым и заполнив его с помощью функции $ (document) .ready.

Пример:

Ваш html будет:

<form method="POST" action="" id="contact-form">

] и в любом месте этой страницы вы можете использовать это, чтобы заполнить его.

<script>
        $(document).ready(function(){
                 $("#contact-form").attr("action", "/yourMailScript.cgi");
        });
</script>

Бот-браузер без javascript не получит действие формы, и они получат 404 при представлении. Любой, у кого нормальный браузер (если у них нет JS, отключенного по параноидальным причинам), получит нормальное поведение.

4
ответ дан David Tesch 17 August 2018 в 11:17
поделиться
  • 1
    Я использую подобный метод для замены значения действия. По умолчанию идет к месту типа honeypot. Но я использую событие on-click / on-focus для изменения значения действия. Думаю, для бота это очень сложно имитировать. См. Мой ответ ниже. – Rick Hellewell 13 July 2018 в 00:17

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

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

0
ответ дан devno 17 August 2018 в 11:17
поделиться

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

document.write("<"+"form>"
  +" NAME "
  +" <"+"input type='text' name='name' /> "
  +"EMAIL "
  +"<"+"input type='text' name='email' /> "
  +"MESSAGE "
  +"<"+"textarea name='message' /> "
  +"<"+"input type='submit' /> "
+"<\/form> ");
6
ответ дан Graza 17 August 2018 в 11:17
поделиться
  • 1
    Это действительно работает? Это похоже на супер простой способ – BillK 9 February 2010 в 17:13
  • 2
    Я очень похожую вещь, когда я просто задавал адрес электронной почты динамически при загрузке страницы. Электронная почта не находится в одной строке, то есть: "my"+"email@"+domain+".com" – Rob Fonseca-Ensor 9 February 2010 в 17:18
  • 3
    Все боты обходят это. – Alysko 9 February 2010 в 17:40
  • 4
    @Alysko: Правда? Я так не думаю. Вы говорите, что все боты полностью понимают и интерпретируют Javascript? Единственная проблема с этим - не все клиенты понимают Javascript либо ... – Tomas 9 February 2010 в 18:43
  • 5
    Некоторые боты обработали бы его, но я предполагаю, что любой, кто пишет бота для скорости, попытается ограничить количество обработки скриптов, поэтому многое пропустит его. @Tomas - согласился с проблемой, хотя не все клиенты ее понимают. Этот подход полностью нарушает изящную деградацию или прогрессивное улучшение. @Rob - Я делаю подобные вещи, но обычно на отдельных строках, а с @ в шестнадцатеричном виде, например m="my";m+="email\x40";m+="dom";m+="ain.c";m+="om"; - параноидальное решение, но я надеюсь, что он обманет всех ботов. Опять же - он разрушает изящную деградацию. Решение Wim выглядит потрясающе – Graza 11 February 2010 в 10:48

Вы можете просто зарегистрировать IP ($ _SERVER ['REMOTE_ADDR']) и запретить повторную валидацию с помощью этого IP-адреса в течение 1 минуты или, более точно, начать сеанс, предоставить идентификатор без вашего посетителя и запретить повторную проверку на 1 минута (или больше, но бот не любит ждать).

-2
ответ дан gromax 17 August 2018 в 11:17
поделиться
  • 1
    Боты обычно не хранят файлы cookie, поэтому сеанс не будет работать. Кроме того, большинство ботов работают на взломанных клиентских ПК, что приводит к бесконечной поставке новых IP-адресов. У меня никогда не было проблем с большим количеством нежелательных сообщений с одного IP-адреса, это всегда накопление с течением времени от множества разных клиентов, что вызывает проблемы ... – Wim 9 February 2010 в 17:16
  • 2
    Вы правы Вим: это просто хорошая практика, чтобы избежать множественного подчинения. – Alysko 9 February 2010 в 17:42

Я нашел хорошую идею на этой странице:

http://www.evengrounds.com/developers/alternatives-to-captcha

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

0
ответ дан Maciek Łoziński 17 August 2018 в 11:17
поделиться

Используйте учетную запись Google или Yahoo. У них хорошие фильтры для защиты от спама.

4
ответ дан Milan Babuškov 17 August 2018 в 11:17
поделиться
  • 1
    Это хорошая идея, gmail поддерживает автоматическую пересылку электронных писем, не так ли? Это может хорошо работать. Вероятно, это и самая простая реализация. И вы рискуете потерять потенциальных клиентов из-за расстройства. – sam 9 February 2010 в 17:11
  • 2
    +1; или любую другую фильтрацию спама в папке «Входящие». Нет причин для того, чтобы обременять пользователя CAPTCHA или браузерами пользователей с помощью html-трюков. Это проблема с входящими сообщениями. – Tomas 9 February 2010 в 18:28
  • 3
    Но если сайт работает под несколькими ботами, есть вероятность, что вы спуститесь с сайта. Это не решение для предотвращения спама, использующего yahoo или gmail. Вы должны решить это с вашего сайта. – Subhojit Mukherjee 17 June 2014 в 07:55

Используйте антиспамовый API, такой как Akismet или Cleantalk. Вы можете использовать традиционные проверки для менее сложных ботов, прежде чем использовать API. Анти-спам-API - единственный способ поймать спам, представленный человеком.

0
ответ дан nmit026 17 August 2018 в 11:17
поделиться

grep для методов URI, символов urlencoded или двух символов разметки HTML, похоже, работает.

0
ответ дан Peter Flynn 17 August 2018 в 11:17
поделиться

Скрытые поля, глупые вопросы (3 + 4?) и т. д. не очень эффективны при блокировании спама на формах, IMHO.

Я исследовал это несколько лет назад и придумал решение, которое я называю «FormSpammerTrap». Он использует код JavaScript для «просмотра» для фокуса / onclick в обязательных полях. Автоматизированные процессы, если они не настроены специально для определенного сайта (который занимает больше времени, чем владельцы spambot хотят взять), не могут «сфокусировать / отключить» нужное поле. (И есть некоторые другие методы, которые я использую.)

У меня есть бесплатное решение на моем сайте www.FormSpammerTrap.com . И там есть форма, где спам-боты могут пытаться спамить ... и они не имеют более трех лет. Вы можете попробовать ... это все с открытым исходным кодом, поэтому вы можете увидеть, как это работает. (И, если вы используете форму, я не собираю вашу электронную почту. Я отвечаю один раз, а затем удаляю вашу электронную почту.)

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

** Добавлено 12 июля 2018 года ** Фокус в том, чтобы добавить событие on-click / on-focus, которое изменяет параметр действия на фактическая страница обработки. В противном случае, значение по умолчанию, которое я использую, является сайтом типа honeytrap. Я думаю, что спамеру сложно моделировать эти события, хотя возможно возможно. Эта технология блокирует множество ботов-спамеров.

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

Работает для меня.

0
ответ дан Rick Hellewell 17 August 2018 в 11:17
поделиться

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

Другой способ: вы также можете использовать проверку электронной почты после отправки формы. И сохраните данные в своей базе данных. Если клиент проверяет URL по электронной почте, контактная информация будет отправлена ​​вам по почте из базы данных.

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

0
ответ дан Subhojit Mukherjee 17 August 2018 в 11:17
поделиться

Вам не нужно будет уменьшать спам, потому что сообщения не публикуются на веб-сайте.

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

-3
ответ дан Tomas 17 August 2018 в 11:17
поделиться
  • 1
    К сожалению, это не так. Текущее поколение спам-ботов просто просматривает веб-страницы и отправляется в формы all , которые они могут найти. Они не знают и не заботятся о том, действительно ли их сообщение делает это на веб-странице или нет ... – Wim 9 February 2010 в 17:19
  • 2
    Я получаю менее 10 спам в день для такой частной контактной формы на большом сайте. Но даже если вы получите сотни, какое это имеет значение? Разве это не то, для чего у нас есть спам-фильтры? Решение на стороне входа, такое как перехват или другие выпущенные решения, является ненужным бременем для частной контактной формы. – Tomas 9 February 2010 в 18:26
  • 3
    Спам-фильтры могут помочь в этом случае, но не всегда. В моей веб-форме Drupal есть слишком много заголовков и нижних колонтитулов, которые делают весь адрес электронной почты в порядке просмотра фильтра, но не посещают относительно небольшое количество содержимого спама посередине. – Wim 10 February 2010 в 00:06

Очень простой трюк, который я использовал с удивительно хорошим успехом, заключается в следующем: Предоставьте текстовое поле, которое скрыто от пользователей с помощью style="display: none", но с заманчивым именем, например email. Большинство ботов будут заполнять что-то в этой области, но люди не могут видеть это так, как обычно. На сервере просто убедитесь, что поле пустое, иначе обработайте его как спам.

55
ответ дан Wim 17 August 2018 в 11:17
поделиться
  • 1
    Отличная идея. Комбинация вашей идеи и Гразы может быть именно такой. – BillK 9 February 2010 в 17:16
  • 2
    Эта великолепная идея! В качестве альтернативы, если боты достаточно умны, чтобы игнорировать такие теги, установите display:none динамически в javascript и добавьте комментарий, в котором пользователь должен НЕ заполнить поле в случае сбоя javascript. – Graza 9 February 2010 в 17:16
  • 3
    Мне нравится эта идея. CAPTCHA - это боль шеи. Защита от спама должна заключаться в обнаружении ботов, а не в том, что пользователь является человеком. – Dónal Boyle 9 February 2010 в 17:19
  • 4
    отличная идея! Но теперь вы отдаете его нам, боты будут знать :) – Alysko 9 February 2010 в 17:39
  • 5
    Я строил бота, как мы говорим, чтобы включить этот дизайн ... злой смех – Anthony Forloney 9 February 2010 в 18:56
Другие вопросы по тегам:

Похожие вопросы: