Спам: заставить ИИ ретроспективно проанализировать последние посты, а затем удалить помеченные как спам

,

Я помог сайту, который подвергся атаке спам-постов в количестве около 30 в час. Мы включили AI Spam, но это не решило проблему уже существующих постов. Вот что я сделал. Возможно, это сработает и для вас. Это не протестировано на вашем сайте, поэтому, если вы решите выполнить какие-либо из этих действий, обязательно создайте резервную копию и убедитесь, что всё выглядит так, будто это не было написано ИИ, пытающимся вывести ваш сайт из строя.

Это предполагает, что вы знаете, что такое Rails и как его запускать. Если нет, то вам, вероятно, не стоит этого делать.

Сначала переведите свой сайт в Режим только для чтения в Discourse, чтобы пользователи не могли создавать новый контент, пока вы совершаете какую-нибудь ужасную ошибку. Затем сделайте резервную копию. Это означает, что до тех пор, пока вы не отключите режим только для чтения, вы сможете безопасно вернуться к резервной копии.

Получение недавних постов

Атака началась чуть более суток назад, поэтому я зашел на два дня назад. Вы также можете использовать что-то вроде 36.hours.ago, если хотите быть более точным. Если бы я был хитрее, возможно, я бы исключил посты в личных сообщениях, но я решил не беспокоиться об этом.

posts = Post.where("created_at >= ?", 2.days.ago)
          .where(deleted_at: nil)
          .where("user_id > ?", 1)

Запуск SpamScanner для этих постов

Я не совсем уверен, что именно привело к сбоям некоторых из них, но если вы видите несколько сообщений «oops», это, вероятно, не повод для беспокойства.

posts.each do |post|
  begin
    puts  "https://talk.commonmark.org/p/#{post.id}"
    DiscourseAi::AiModeration::SpamScanner.perform_scan(post)
  rescue
    puts "oops";
  end;
  sleep 0.2;
end

Получение постов, которые теперь требуют проверки

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

reviewables = Reviewable.where(status: "pending")
  .where(potential_spam: true)
  .where("created_at >= ?", 1.hour.ago)
  .where("updated_at >= ?", 1.hour.ago)

Слепо доверять ИИ

Конечно, вы внимательно просмотрели темы, которые были скрыты, и все они выглядят как настоящий спам, так что вы просто пойдете на это. Заголовок — шутка. Вы ведь не собираетесь слепо доверять ИИ, правда?!?!?

Это приведет к удалению постов, а также к удалению и блокировке пользователей. Это действительно, очень опасно.


reviewables.each do |reviewable|
  begin
    puts "deleting https://talk.commonmark.org/t/#{reviewable.topic_id}"
    if reviewable.topic.nil?
      puts "already gone"
      next
    end
    reviewable.perform(user, :delete_user_block)
  rescue
    puts "oops"
  end
end

8 лайков