Spam Blocker
遗留命名
该软件包最初是在 @plebbit 范围下发布的。它已重命名为@bitsocial/spam-blocker-server 和@bitsocial/spam-blocker-challenge。对旧名称的引用可能仍出现在旧文档或代码库中。
Spam Blocker 是一种集中式垃圾邮件检测服务,可评估传入的出版物并分配风险评分。它由两个包组成:
@bitsocial/spam-blocker-server-- 托管评估和质询 API 的 HTTP 服务器。@bitsocial/spam-blocker-challenge-- 社区集成的轻量级客户端包,用于发送出版物进行评估。
源代码: github.com/bitsocialnet/spam-blocker
风险评分如何运作
提交到 /evaluate 端点的每份出版物都会收到一个数字风险评分。该分数是多个信号的加权组合:
| 信号 | 描述 |
|---|---|
| 账户年龄 | 较新的帐户获得较高的风险评分。 |
| 业力 | 积累的社区业力可以降低风险。 |
| 作者声誉 | 由后台网络索引器收集的声誉数据。 |
| 内容分析 | 文本级启发式(链接密度、已知垃圾邮件模式等)。 |
| 速度 | 同一作者快速连续发表的帖子会增加风险。 |
| 知识产权情报 | 国家级地理位置和威胁源查找。仅存储国家/地区代码 - 原始 IP 地址绝不会与社区共享。 |
等级门槛
风险评分映射到四个可配置层之一,决定接下来会发生什么:
- 自动接受 - 分数足够低,出版物无需任何质疑即可获得批准。
- OAuth-sufficient——作者必须完成 OAuth 验证才能继续。
- OAuth-plus-more -- 仅靠 OAuth 是不够的;需要额外的验证(例如验证码)。
- 自动拒绝 -- 分数太高;该出版物被彻底拒绝。
所有阈值均可按社区进行配置。
挑战流程
当出版物落入需要验证的层时,挑战流程开始:
- 首先提示作者通过 OAuth(GitHub、Google、Twitter 和其他支持的提供商)进行身份验证。
- 如果单独的 OAuth 不够(第 3 层),则会提供由 Cloudflare Turnstile 提供支持的 CAPTCHA 后备。
- OAuth 身份仅用于验证 - 永远不会与社区或其他用户共享。
API端点
POST /evaluate
提交出版物进行风险评估。返回计算出的风险评分和所需的挑战级别。
POST /challenge/verify
提交已完成质询的结果(OAuth 令牌、CAPTCHA 解决方案或两者)以进行验证。
GET /iframe/:sessionId
返回一个可嵌入的 HTML 页面,该页面为给定会话呈现适当的挑战 UI。
速率限制
根据作者年龄和声誉动态应用速率限制。较新或声誉较低的作者面临更严格的限制,而知名作者则享有更宽松的门槛。这可以防止垃圾邮件泛滥,而不会惩罚受信任的参与者。
后台网络索引器
服务器运行后台索引器,不断抓取网络以构建和维护作者声誉数据。这些数据直接输入风险评分管道,使系统能够识别社区中重复的善意参与者。
隐私
垃圾邮件拦截器的设计考虑到了隐私:
- OAuth 身份仅用于质询验证,绝不会向社区披露。
- IP 地址仅解析为国家/地区代码;原始 IP 不会被存储或共享。
数据库
服务器使用SQLite(通过better-sqlite3)在本地持久保存信誉数据、会话状态和配置。