需要协助处理大量垃圾邮件

这真是一场令人头疼的战斗,以下是一些背景信息。

我经营着一个社区,社区围绕着它建立了巨大的热度。我们有超过一百万人关注我们的项目,并且我们建立了一个 Discourse 论坛来协助我们社区内的开发者。本质上,这是一个开发者支持论坛,用于与我们的项目互动,我们不允许发布与开发无关的内容。

大约三天前,一位著名的 YouTube/Twitter 人物错误地声称,通过注册我们的支持论坛并在上面发帖,就有资格获得我们团队的奖励/赠品。这完全是错误的,并导致了三天来近乎持续的注册,以及论坛上大量的垃圾帖子和主题。

我们目前每天的注册量在 2,500 到 7,500 之间,主要来自亚洲和中东国家(有 2 个特定国家是主要的违规者)。

注册用户似乎是机器人和真实用户的混合体。几乎所有的 IP 地址都是唯一的(IPv4 和 IPv6 的健康混合),并且似乎没有突出的 IPv4 子网可以禁止以批量移除它们(IPv6 我在禁止 /24 块方面取得了一些进展,但似乎很容易绕过)。电子邮件地址都是 Gmail,其中很大一部分似乎是一次性/机器人电子邮件地址。这些是机器人账户的唯一迹象是,许多账户会在其个人资料上重复使用相同的横幅图片,以及一些通用的“我是一名学生”的传记文本。

我已经匿名化了这个列表,通过更改字符/数字,但为了给您提供与这些注册相关的电子邮件类型的示例:

  1. syedaleem435@gmail.com
  2. kksam362@gmail.com
  3. julik8641@gmail.com
  4. eishanihal253@gmail.com
  5. subir2426@gmail.com
  6. meeagle38103@gmail.com

这些用户注册后,会发布与我们社区无关的新主题。通常,这些主题甚至不是单词,就好像一个蹒跚学步的孩子在键盘上乱按一样。检测和删除这些主题并不难,但更糟糕的是他们在现有主题中发布垃圾/低质量内容。我们许多更受欢迎的主题都增加了 500 到 1,500 篇新的垃圾/低质量帖子。

截至目前,我已经完全禁用了注册,但我正在寻求以下方面的帮助:

  1. 是否有任何方法可以批量清除成员?我能否删除过去 72 小内注册的所有 TL0 用户?
  2. 是否有办法检测垃圾/一次性电子邮件并拒绝其注册?此时,我愿意暂时阻止所有以 3-5 位数字结尾的电子邮件。
  3. 您是否建议将自动静音设置为大于 3000 毫秒的值?
  4. 您能否给我任何其他技巧或窍门来帮助应对大量的垃圾邮件?我觉得在过去的 2-3 天里,这已经成为一份全职工作了。我使用 Akismet,但是否有任何额外的插件可能有帮助?
5 个赞

我会——至少暂时——将所有类别的创建/回复设置为 TL1,或者甚至 TL2,或者使用自定义向导让新用户经历一些障碍(“我明白我不会获得奖励”,有 10 个选项,只有一个是正确的),让他们被添加到可以发帖的组中。

4 个赞

您可以在注册页面上使用自定义用户字段,并将其设置为必填的多选选项,提供多个答案,其中只有一个是可接受的。这可能会稍微减慢机器人的速度,或者至少为您提供一个易于筛选的字段,以帮助删除虚假的注册。 (注意:仔细考虑后,我怀疑这不起作用,因为没有强制要求特定答案。早期回复中的方法可能更好。)

我认为如今的验证码式陷阱效果不佳,机器人比我还能解决它们。

应该有一种方法可以在 Rails 中删除新的 L0 用户,但请务必先进行备份。如果他们已经发帖,您将需要先删除这些帖子。

其他人曾表示,要求注册时提供双因素身份验证 ID 基本上可以消除垃圾邮件发送者。我还没有 resorting 到这一步。

6 个赞

感谢大家到目前为止的回复。

禁用注册一天后,我们又恢复了正常。

@RGJ 我喜欢你关于设置障碍来加入有发帖权限的群组的想法,我们会进一步研究这一点。

通过使用数据浏览器,我已经能够识别出大约 5,000 个之前未被发现的机器人账户。

@MikeNolan 我不确定我是否拥有 rails 控制台的访问权限。我们直接与 discourse 合作托管,而且我没有参与购买/入职流程,所以我正在向上级询问,以确定我们拥有哪些访问权限。

我猜我也可以通过 API 进行删除?我看到我可以轻松地生成 API 凭证。

类似这样的:

import csv
import requests
import time

api_key = 'api_key'
api_username = 'api_username'
base_url = 'https://mydomain.com'
headers = {
    'Api-Key': api_key,
    'Api-Username': api_username
}

def delete_user(user_id):
    delete_url = f'{base_url}/admin/users/{user_id}.json'
    response = requests.delete(delete_url, headers=headers)

    if response.status_code == 200:
        print(f'Successfully deleted user {user_id}')
    else:
        print(f'Failed to delete user {user_id}. Status code: {response.status_code}, Response: {response.text}')

with open('user_ids_to_delete.csv', 'r') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        user_id = row[0]
        try:
            delete_user(user_id)
        except Exception as e:
            print(f'Error occurred while deleting user {user_id}: {e}')

        time.sleep(1)  # Add a delay to avoid overwhelming the server with requests
1 个赞

几年前,我们的旧论坛(phpbb3)遭受了一波虚假注册的冲击,其中许多电子邮件与您列出的 Gmail 类似,但我们也收到了不少来自 .ru 地址的邮件,特别是 Yandex。

一度我们每天收到 1000 封。在我们控制住局面时,我们已经有了超过 80,000 条虚假记录。

我们通过要求一个有效的当前会员 ID(我们的会员系统是完全独立的)并且该 ID 尚未被用于创建论坛记录来解决了这个问题。这样一来,即使有人访问了我们的会员记录(它们是在线的),他们也只能使用一次 ID。虚假注册几乎降至零。

我还没有足够使用数据浏览器,所以我不知道它的局限性。我做 PostgreSQL DBA 已经超过 20 年了,所以直接使用 psql 对我来说不是问题,但我将我的活动限制在只读查询。

3 个赞

指纹识别技术是否仍然可行,还是浏览器已经基本上让它成为一种无效的工具?

1 个赞

正确的问题是,这是否曾是一种可行的技术;)

(另外提醒一下:在欧盟这是非法的)

从 rails (docker exec -it my_container rails c):

spammers = User.where(trust_level: 0).where("created_at > ?",  Date.today - 3)
puts "找到 #{spammers.length} 个垃圾邮件发送者"

destroyer = UserDestroyer.new(Discourse.system_user)
spammers.each do |spammer|
  destroyer.destroy(spammer, delete_posts: true)
end

如果它仅用于垃圾邮件预防,而不用于用户行为跟踪,那么它将被 GDPR 视为“合法利益”而允许。

1 个赞

那么,没有身份证明的人该如何使用它呢?

我不确定您说的“识别”是什么意思。

如果您是我的论坛用户,并且已被我封禁,我可以使用指纹插件来查看您是否以其他名称创建了新帐户,以便我也可以封禁该帐户。在这种情况下,我仅仅是利用指纹技术来保护我作为论坛所有者的自身利益。我没有向您出售任何东西,也没有不必要地侵犯您的隐私。它的工作原理与存储和比较 IP 地址相同,只是 IP 地址可以通过代理或 VPN 轻松更改。

2 个赞

指纹识别插件工具主题中的评论可能不完全同意您关于指纹识别和欧盟的合法性。\n\nhttps://meta.discourse.org/t/discourse-fingerprint-browser-fingerprinting-plugin/114890\n\n谢天谢地,我目前没有一个网站,指纹识别似乎是一种有用的反垃圾邮件措施。

1 个赞

您是否考虑过启用新用户批准?您也可以告知您的社区新成员需要电子邮件链接邀请。

如果该 YouTuber 仍然是一个问题,请标记该视频并向 YouTube 提出投诉。

1 个赞

只是为了跟进并完成这件事 - 这已通过私信跟进并解决。 :partying_face:

但对于处于类似情况的任何人来说,如果您由于托管托管而无法访问 rails 控制台,您确实可以使用 API 删除用户。 :+1:

1 个赞