مانع البريد العشوائي
تعد خدمة Spam Blocker خدمة مركزية للكشف عن البريد العشوائي وتقوم بتقييم المنشورات الواردة وتعيين درجات المخاطر. يتكون من حزمتين:
@bitsocial/spam-blocker-server- خادم HTTP الذي يستضيف واجهات برمجة التطبيقات للتقييم والتحدي.@bitsocial/spam-blocker-challenge- حزمة عميل خفيفة الوزن تدمجها المجتمعات لإرسال المنشورات للتقييم.
كود المصدر: github.com/bitsocialnet/spam-blocker
كيف يعمل تسجيل المخاطر
يتلقى كل منشور يتم إرساله إلى نقطة النهاية /evaluate درجة مخاطرة رقمية. النتيجة عبارة عن مزيج مرجح من عدة إشارات:
| إشارة | الوصف |
|---|---|
| عمر الحساب | تتلقى الحسابات الأحدث درجات مخاطر أعلى. |
| الكرمة | الكارما المجتمعية المتراكمة تقلل من المخاطر. |
| سمعة المؤلف | بيانات السمعة التي تم جمعها بواسطة مفهرس الشبكة الخلفية. |
| تحليل المحتوى | الاستدلال على مستوى النص (كثافة الارتباط، وأنماط البريد العشوائي المعروفة، وما إلى ذلك). |
| السرعة | المشاركات المتعاقبة السريعة من نفس المؤلف تزيد من المخاطر. |
| ذكاء الملكية الفكرية | تحديد الموقع الجغرافي على مستوى الدولة وعمليات البحث عن التهديدات. يتم تخزين رموز البلدان فقط - ولا تتم مشاركة عناوين IP الأولية مع المجتمعات مطلقًا. |
عتبات الطبقة
يتم تعيين درجة المخاطرة إلى واحدة من المستويات الأربعة القابلة للتكوين والتي تحدد ما سيحدث بعد ذلك:
- القبول التلقائي -- النتيجة منخفضة بما يكفي للموافقة على النشر دون أي اعتراض.
- OAuth-كافي -- يجب على المؤلف إكمال التحقق من 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) للاستمرار المحلي لبيانات السمعة وحالة الجلسة والتكوين.