مسدود کننده اسپم
Spam Blocker یک سرویس تشخیص اسپم متمرکز است که نشریات دریافتی را ارزیابی می کند و امتیاز ریسک را تعیین می کند. از دو بسته تشکیل شده است:
@bitsocial/spam-blocker-server-- سرور HTTP که APIهای ارزیابی و چالش را میزبانی می کند.@bitsocial/spam-blocker-challenge- یک بسته مشتری سبک وزن که جوامع برای ارسال نشریات برای ارزیابی یکپارچه می شوند.
کد منبع: github.com/bitsocialnet/spam-blocker
نحوه امتیازدهی ریسک
هر نشریه ای که به نقطه پایانی /evaluate ارسال می شود، یک امتیاز ریسک عددی دریافت می کند. امتیاز ترکیبی وزنی از چندین سیگنال است:
| سیگنال | توضیحات |
|---|---|
| سن حساب | حساب های جدیدتر امتیاز ریسک بالاتری دریافت می کنند. |
| کارما | کارمای اجتماع انباشته شده خطر را کاهش می دهد. |
| شهرت نویسنده | داده های شهرت جمع آوری شده توسط نمایه ساز شبکه پس زمینه. |
| تحلیل محتوا | اکتشافی در سطح متن (تراکم پیوند، الگوهای هرزنامه شناخته شده، و غیره). |
| سرعت | پست های متوالی سریع از یک نویسنده خطر را افزایش می دهد. |
| هوش IP | موقعیت جغرافیایی در سطح کشور و جستجوی خوراک تهدید. فقط کدهای کشور ذخیره می شوند -- آدرس های IP خام هرگز با جوامع به اشتراک گذاشته نمی شوند. |
آستانه های ردیف
امتیاز ریسک به یکی از چهار سطح قابل تنظیم نگاشت می شود که تعیین می کند چه اتفاقی می افتد:
- پذیرش خودکار -- امتیاز به اندازه ای کم است که انتشار بدون هیچ چالشی تایید شود.
- OAuth-sufficient -- نویسنده برای ادامه باید تأییدیه OAuth را تکمیل کند.
- OAuth-plus-more -- OAuth به تنهایی کافی نیست. تأیید اضافی (به عنوان مثال، CAPTCHA) مورد نیاز است.
- رد خودکار - امتیاز خیلی بالاست. انتشار به طور کامل رد می شود.
همه مقادیر آستانه در هر جامعه قابل تنظیم هستند.
جریان چالش
هنگامی که یک نشریه در ردیفی قرار می گیرد که نیاز به تأیید دارد، جریان چالش آغاز می شود:
- ابتدا از نویسنده خواسته می شود تا از طریق OAuth (GitHub، Google، Twitter و سایر ارائه دهندگان پشتیبانی شده) احراز هویت کند.
- اگر OAuth به تنهایی کافی نباشد (سطح 3)، یک CAPTCHA بازگشتی ارائه شده توسط Cloudflare Turnstile ارائه می شود.
- هویت OAuth صرفاً برای تأیید استفاده میشود -- هرگز با انجمن یا سایر کاربران به اشتراک گذاشته نمیشود.
نقاط پایانی API
POST /evaluate
یک نشریه برای ارزیابی ریسک ارسال کنید. امتیاز ریسک محاسبه شده و ردیف چالش مورد نیاز را برمیگرداند.
POST /challenge/verify
نتیجه یک چالش تکمیل شده (توکن OAuth، راه حل CAPTCHA یا هر دو) را برای تأیید ارسال کنید.
GET /iframe/:sessionId
یک صفحه HTML قابل جاسازی را برمیگرداند که رابط کاربری چالشی مناسب را برای جلسه داده شده ارائه میکند.
محدود کردن نرخ
محدودیت های نرخ به صورت پویا بر اساس سن و شهرت نویسنده اعمال می شود. نویسندگان جدیدتر یا کم شهرت با محدودیت های سخت گیرانه تری روبرو هستند، در حالی که نویسندگان معتبر از آستانه های سخاوتمندانه بیشتری برخوردارند. این کار از سیل هرزنامه ها بدون جریمه کردن شرکت کنندگان قابل اعتماد جلوگیری می کند.
نمایه ساز شبکه پس زمینه
سرور یک فهرستکننده پسزمینه اجرا میکند که بهطور پیوسته شبکه را میخزد تا دادههای شهرت نویسنده را ایجاد و حفظ کند. این دادهها مستقیماً به خط لوله امتیازدهی ریسک وارد میشود و به سیستم اجازه میدهد شرکتکنندگان با حسن نیت تکراری را در سراسر جوامع تشخیص دهد.
حریم خصوصی
مسدود کننده هرزنامه با در نظر گرفتن حریم خصوصی طراحی شده است:
- شناسههای OAuth فقط برای تأیید چالش استفاده میشوند و هرگز برای انجمنها افشا نمیشوند.
- آدرس های IP فقط به **کدهای کشور ** حل می شود. IP های خام ذخیره یا به اشتراک گذاشته نمی شوند.
پایگاه داده
سرور از SQLite (از طریق better-sqlite3) برای تداوم محلی داده های شهرت، وضعیت جلسه و پیکربندی استفاده می کند.