J’ai aidé un site qui a reçu environ 30 messages de spam par heure. Nous avons activé le spam par IA, mais cela n’a pas résolu le problème des messages existants. Voici ce que j’ai fait. Cela pourrait fonctionner pour vous. Ce n’est pas testé sur votre site, donc si vous faites l’une de ces choses, vous devriez faire une sauvegarde et vous assurer que cela ne ressemble pas à quelque chose écrit par une IA qui essaie de faire tomber votre site.
Cela suppose que vous savez ce qu’est Rails et comment l’exécuter. Sinon, vous ne devriez probablement pas le faire.
Tout d’abord, vous devriez mettre votre site en Mode Lecture Seule dans Discourse afin que les gens ne créent pas de contenu pendant que vous faites une terrible erreur. Ensuite, faites une sauvegarde. Cela signifie que jusqu’à ce que vous désactiviez le mode lecture seule, vous pourrez revenir en toute sécurité à votre sauvegarde.
Obtenir les messages récents
L’attaque a commencé il y a un peu plus d’un jour, alors je suis revenu sur deux jours. Vous pourriez aussi faire des choses comme 36.hours.ago si vous voulez être plus explicite. Si j’étais plus malin, j’aurais fait quelque chose pour ignorer les messages dans les MP, mais j’ai décidé de ne pas m’en soucier.
posts = Post.where("created_at >= ?", 2.days.ago)
.where(deleted_at: nil)
.where("user_id > ?", 1)
Appeler le SpamScanner sur ces messages
Je ne suis pas tout à fait sûr de ce qui s’est passé pour que certains échouent, mais si vous obtenez quelques “oops”, ce n’est probablement pas une source de préoccupation.
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
Obtenir les messages qui nécessitent maintenant une révision
Cela récupère les messages révisables qui viennent d’être marqués comme révisables (vraisemblablement par les actions ci-dessus). Nous ne voulons pas appliquer cela aveuglément à des choses qui ne font pas partie de cette aventure dangereuse.
reviewables = Reviewable.where(status: "pending")
.where(potential_spam: true)
.where("created_at >= ?", 1.hour.ago)
.where("updated_at >= ?", 1.hour.ago)
Faire aveuglément confiance à l’IA
Bien sûr, vous avez examiné attentivement les sujets qui ont été masqués et ils ressemblent tous à du spam, alors vous allez y aller. Le titre est une blague. Vous ne faites pas aveuglément confiance à l’IA, n’est-ce pas ?!?!?
Cela supprimera les messages et supprimera et bloquera les utilisateurs. C’est vraiment, vraiment dangereux.
reviewables.each do |reviewable|
begin
puts "suppression de https://talk.commonmark.org/t/#{reviewable.topic_id}"
if reviewable.topic.nil?
puts "déjà supprimé"
next
end
reviewable.perform(user, :delete_user_block)
rescue
puts "oops"
end
end