Сообщение о спаме или злоупотреблении - PullRequest
3 голосов
/ 25 января 2011

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

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

Есть ли что-то, что делает это уже в php?

Ответы [ 3 ]

8 голосов
/ 25 января 2011

База данных

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

Я бы создал таблицу, которая выглядит примерно так:

flag_seq | post_id | flagger_username |       timestamp     |       user_notes      | active
============================================================================================
       1 |    1431 |          joebob1 | 2010-01-25 13:41:12 | it's spam             | TRUE
       2 |    1431 |      i_hate_spam | 2010-01-25 14:01:23 | You know I hate spam. | TRUE
       3 |    2283 |          joebob1 | 2010-01-24 08:09:57 | vulgar language       | TRUE

Отслеживание каждого флага в отдельности позволит вам выполнять более сложные действия на уровне администрирования или модерации.

  • Вы можете отслеживать, кто что помечает (в случае, если кто-то злоупотребляет этой функцией, т. Е. joebob1 не любит * i_hate_spam *, поэтому они продолжают отмечать свои сообщения как оскорбительные).
  • Вы можете сделать быстрый подсчет, выполнив SELECT COUNT(*) FROM flag_table WHERE post_id = '1431'.
  • Вы можете удалить некоторые флаги индивидуально, указав flag_seq помеченного сообщения.
  • Дайте пользователю возможность добавлять свои комментарии, чтобы вы точно знали, что и почему они сообщают об этом. Вы также можете выбрать для них предопределенные параметры в поле <select>.
  • Устанавливая флаг active, вы никогда не удаляете свои флаги, даже после того, как они были обработаны. Это полезно для получения статистики по отмеченным сообщениям. Вы можете использовать эту информацию для оправдания большего количества модераторов или для того, чтобы посвятить время поиску новых методов борьбы со спамом и т. Д.

Отметить этот пост

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

Умеренность

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

  • Вы могли бы написать крон, который будет проверять количество флагов на каждом посте и предпринимать определенные действия при определенных порогах.
  • Вы можете написать страницу модерации, в которой перечислены все активные флаги с различными способами их обработки. (например, удалить пост, отредактировать пост, забанить постер, все вышеперечисленное и т. д.)
0 голосов
/ 25 января 2011

Я не знаю, есть ли что-то встроенное в php. Вы можете использовать дополнительное поле в таблице. Скажем, у вас есть сообщение в таблице что-то вроде

id заголовок содержание дата ... flags

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

0 голосов
/ 25 января 2011

Если вы хотите реализовать это самостоятельно с нуля, вам следует создать таблицу с именем report.

Эта таблица будет иметь следующие поля:

  • REPORT_ID
  • post_id
  • причина
  • Дата и время

Я думаю, вот и все.

...