Каков наилучший способ фильтрации спама с помощью JavaScript? - PullRequest
6 голосов
/ 06 октября 2010

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

Что касается того, что делает спам-фильтр "лучшим", я бы сказал, что это критерии:

  • Самый точный
  • Наименее уязвимы для атак
  • быстрый
  • Самый прозрачный

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

Вот моя попытка составить список различных методов вместе с их недостатками и преимуществами:


Фильтры на основе правил:

Что он делает: «Оценивает» сообщение, присваивая значение балла различным критериям (т. Е. Все в верхнем регистре, все не алфавитно-цифровые и т. Д.) В зависимости от оценки сообщение отбрасывается или сохраняется .

Преимущества:

  • Простота реализации
  • В основном прозрачный

Недостатки:

  • Прозрачный - обычно легко перепроектировать код, чтобы обнаружить правила, и таким образом создать сообщения, которые не будут получены
  • Трудно сбалансировать значения точек (ложные срабатывания)
  • Может быть медленным; Для каждого сообщения необходимо выполнить несколько правил, много раз используя регулярные выражения
  • В среде на стороне клиента для обновления правил требуется взаимодействие с сервером или взаимодействие с пользователем

Байесовская фильтрация:

Что он делает: Анализирует частоту слов (или частоту триграмм) и сравнивает ее с данными, которые он обучил с.

Преимущества :

  • Нет необходимости создавать правила
  • Быстро (относительно)
  • Жестче, чтобы перепроектировать

Недостатки:

  • Требуется обучение, чтобы быть эффективным
  • Обученные данные должны быть доступны для JavaScript; обычно в форме удобочитаемого JSON, XML или плоского файла
  • Набор данных может стать довольно большим
  • Плохо спроектированные фильтры легко спутать с хорошим набором общих слов, чтобы понизить рейтинг spamacity
  • Слова, которые раньше не видели, не могут быть точно классифицированы; иногда приводящий к неправильной классификации всего сообщения
  • В среде на стороне клиента для обновления правил требуется взаимодействие с сервером или взаимодействие с пользователем

Байесовская фильтрация на стороне сервера:

Что он делает: Применяет сторону сервера байесовской фильтрации, отправляя каждое сообщение на удаленный сервер для анализа.

Преимущества:

  • Все преимущества обычной байесовской фильтрации
  • Учебные данные не предоставляются пользователям / реверс-инженерам

Недостатки:

  • Интенсивное движение
  • По-прежнему уязвим для необычных слов
  • По-прежнему уязвим для добавления общих слов, чтобы уменьшить spamacity
  • Сам сервис может быть нарушен
  • Для обучения классификатора может потребоваться предоставить пользователям возможность отправлять образцы спама для обучения. Злоумышленники могут использовать эту услугу

черный список

Что он делает: Применяет набор критериев к сообщению или некоторому его атрибуту.Если один или несколько (или определенное количество) критериев соответствуют, сообщение отклоняется.Очень похоже на фильтрацию на основе правил , поэтому см. Подробности в ее описании.

CAPTCHA и т. П.:

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


Может кто-нибудь помочь мне заполнить пробелы?Спасибо,

1 Ответ

2 голосов
/ 07 октября 2010

Не существует «лучшего» способа, особенно для всех пользователей или всех ситуаций.

Будьте проще:

  1. Пусть сценарий GM изначально скрывает все комментарии, содержащие ссылки и, возможно, повсеместно плохие слова (F * ck, пресвитерианский и т. Д.). ;)
  2. Затем скрипт связывается с вашим сервером и позволяет серверу оценивать каждый комментарий по критерию X (подробнее об этом ниже).
  3. Показать или скрыть комментарии на основе ответа сервера. В случае тайм-аута показать или показать на основе настроек пользователя («Что делать, когда сервер фильтра не работает? (Показать / скрыть комментарии со ссылками)).
  4. Вот и все для сценария GM; остальное обрабатывается сервером.

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

Настройка сервера на использование комбинации плохих слов, адресатов с плохими ссылками (например, доменов .ru и .cn) и общедоступных служб фильтрации спама.

Самое главное - предложить пользователям какой-то способ выбрать и идеально настроить то, что для него применяется.

...