إضافة لنشر موضوع مجهول عبر رسالة خاصة أو تقديم ملاحظات مجهولة

:information_source: ملخص يوفر نموذجين مستقلين للنشر المجهول
:hammer_and_wrench: رابط المستودع GitHub - elRicharde/discourse-anonymous-feedback: Anonymous Feedback Formular in Discourse · GitHub
:open_book: دليل التثبيت كيفية تثبيت الإضافات في Discourse

توفر هذه الإضافة لـ Discourse نموذجين مستقلين للنشر المجهول: “ملاحظات مجهولة” و"لوحة بيضاء". كلا النموذجين محميان بـ “رمز باب” (كلمة مرور بسيطة) ويسمحان للمستخدمين الذين لا يملكون حسابًا بإرسال رسالة خاصة إلى مجموعة مستخدمين مُعدّة مسبقًا، حتى لو كان المنتدى يتطلب عادةً تسجيل الدخول، فإن هذين النموذجين لا يتطلبان ذلك.

تقنيًا، تُقدَّم المنشورات عبر صفحة ويب دون الحاجة إلى تسجيل الدخول، ويمكن استخدامها حتى في علامة تبويب تصفح خاصة. لا توجد إمكانية لتتبع المرسل، حيث لا يتم تسجيل عناوين IP. صُمِّمت هذه الإضافة لتوفير قناة آمنة وسرية للتواصل.

لماذا تستخدم هذه الإضافة؟

في العديد من المجتمعات، تتطلب المواضيع الحساسة أو الأفكار قناة للحصول على ملاحظات تضمن السرية وتقلل الضغط الاجتماعي. تعالج هذه الإضافة عدة تحديات رئيسية:

  • تعزيز الملاحظات غير المقيدة: توفر مساحة آمنة للمستخدمين (وحتى غير المستخدمين، إذا تم مشاركة رمز الباب خارجيًا) لمشاركة آراء صادقة وغير مرشحة، أو مخاوف، أو أفكار مبتكرة دون خوف من الحكم أو العواقب. يمكن أن يؤدي ذلك إلى مدخلات أكثر صراحة وقيمة قد تُحجم عنها عادةً.

  • السرية والثقة: من خلال ضمان السرية عبر إجراءات تقنية (مثل تحديد المعدل القائم على HMAC دون تسجيل عناوين IP)، تبني الإضافة الثقة وتشجع على مشاركة أوسع، خاصةً في المواضيع الدقيقة.

  • سد فجوات التواصل: تخلق جسر تواصل يمكن الوصول إليه للأفراد الذين يترددون في النشر علنًا أو الذين لا يملكون حسابًا في Discourse، مما يوسع نطاق مشاركة المجتمع.

  • مدخلات منظمة: من خلال توجيه الملاحظات إلى مجموعة خاصة محددة، تضمن أن المعلومات الحساسة يتم مراجعتها من قبل أعضاء الفريق المناسبين، مما يسمح بمناقشة مركزة واتخاذ إجراءات بعيدًا عن الأنظار العامة.

  • البساطة لغير المستخدمين: يسمح آلية رمز الباب للأطراف الخارجية أو الزوار المؤقتين بتقديم مدخلات دون عبء تسجيل حساب كامل.

في النهاية، تعزز هذه الإضافة تفاعل المجتمع من خلال تمكين بيئة أكثر شمولية وأمانًا للنقاشات والاقتراحات الحرجة.

كيف تعمل (نظرة تقنية عامة)

تم تطوير الإضافة مع التركيز على السرية والأمان.

  1. الوصول: ينتقل المستخدم إلى /anonymous-feedback أو /white-board.

  2. فتح القفل: يجب على المستخدم إدخال رمز الباب الصحيح. يتحقق الخادم من هذا الرمز.

    • لمنع هجمات القوة الغاشمة، يستخدم الخادم نظام تحديد معدل يعتمد على تجزئة HMAC لعنوان IP الخاص بالمستخدم ومفتاح سري متغير. لا يتم تخزين عنوان IP نفسه أبدًا.

    • إذا كان الرمز صحيحًا، يحدد الخادم علمًا مؤقتًا قابلًا للاستخدام لمرة واحدة في جلسة المستخدم.

  3. الإرسال: يكتب المستخدم رسالته ويرسلها.

  4. إنشاء رسالة خاصة: يتحقق الخادم من علم الجلسة. إذا كان صالحًا، ينشئ رسالة خاصة جديدة إلى مجموعة الهدف المُعدة وينشرها باسم مستخدم البوت المُعد (أو مستخدم النظام). ثم يتم حذف علم الجلسة فورًا، لذا يجب على المستخدم إدخال رمز الباب مرة أخرى لأي رسالة لاحقة.

حالات الاستخدام / سير العمل

صُمِّمت هذه الإضافة لتكون مرنة. إليك سير عمل شائع يمكنك تنفيذه:

حالة الاستخدام 1: “اللوحة البيضاء” - لوحة إعلانات عامة خاضعة للإشراف

تُستخدم هذه الحالة لزيادة وضوح المواضيع الحساسة أو السلوك غير اللائق الذي لوحظ في المجتمع (مثلًا في الفعاليات أو التفاعلات العامة). على سبيل المثال، إظهار قضايا مثل التمييز الجنسي.

الهدف: جعل القضايا المهمة مرئية للمجتمع دون الكشف عن هوية الشخص الذي أبلغ عنها. التركيز على الرسالة، وليس المرسل، وربما حتى على الأفراد المعنيين. التمثيل البسيط للمواقف ذات السلوك غير اللائق، دون ذكر الأسماء، يخلق وعيًا ويزيد من الوعي.

سير العمل:

  1. التقديم: يقدم المستخدم منشورًا عبر نموذج /white-board. يمكن الوصول إليه من قبل الأعضاء (MG) والمتدربين (ANW) والميسرين (FM). فقط المستخدم “المجهول” يمكنه إنشاء منشورات.

  2. المراجعة الخاصة: يصل المنشور كرسالة خاصة إلى target_group المُعد (مثل فريق الإشراف أو لجنة “الثقة والسلامة”). سيكون قابلاً للتعرف عليه كمدخل “لوحة بيضاء”.

  3. الفحص: يراجع الفريق التقديم ضد معايير محددة مسبقًا (مثل عدم وجود هجمات شخصية، أو إهانات، أو الالتزام بإرشادات المجتمع).

  4. النشر (في حال الموافقة): يُدعى المسؤول إلى الرسالة لتحويلها إلى موضوع عام في فئة “لوحة بيضاء” عامة مخصصة. يُنشر هذا الموضوع باستخدام حساب عام محدد (مثل “WhiteBoardBot” أو مستخدم “المجهول”، مُعد عبر إعداد bot_username). يمكن مشاركة تفاصيل تسجيل الدخول لهذا المستخدم مع مجموعة المراجعة. يتم النشر بواسطة المستخدم “المجهول”.

  5. التحكم في النقاش: تُضبط أذونات فئة “لوحة بيضاء” بحيث تكون مرئية للأعضاء/المتدربين/الميسرين ولكن غير قابلة للتعليق. يُتوقع من مشرفي المنتدى العاديين عدم الإشراف على هذا المجال المحدد؛ هذه مسؤولية مجموعة target_group المعينة فقط. لا يزال هناك سؤال حول ما إذا كانت لوحة البيضاء يجب أن تحتوي على فئات فرعية (مثل “مجهولة مغلقة” أو فئات مخصصة لمنشورات target_group).

  6. معالجة الرفض: نظرًا لعدم وجود طريقة للتواصل مع المرسل المجهول، فإن من الممارسات الجيدة تثبيت موضوع في فئة “لوحة بيضاء” يشرح معايير النشر والأسباب التي قد تؤدي إلى رفض التقديم. يجب دائمًا جعل القواعد التي تبرر عدم النشر عامة في مكان واحد في المنتدى.

حالة الاستخدام 2: ملاحظات مجهولة - قناة خاصة ومباشرة

تُستخدم هذه الحالة لتوفير خط اتصال مباشر وسري إلى فريق محدد لأي نوع من الملاحظات (مثل ملاحظات التصويت أو اقتراحات مجهولة أخرى).

الهدف: منح الأعضاء وغير الأعضاء طريقة آمنة لتقديم ملاحظات حول شؤون المجتمع، أو التصويت، أو مواضيع أخرى مباشرة إلى القيادة أو لجنة ذات صلة.

سير العمل:

  1. التقديم: يقدم المستخدم ملاحظات عبر نموذج /anonymous-feedback. يمكن أن تساعد سطر الموضوع في تصنيف الرسالة. تصل هذه المنشورات مع بادئة الموضوع “رسالة مجهولة - dd.mm.yyyy، hh:mm:ss” إلى صندوق الوارد الجماعي لـ target_group.

  2. التسليم الخاص: تصل الرسالة كرسالة خاصة إلى target_group. يمكن التعرف عليها كـ “ملاحظات مجهولة” من خلال بادئة الموضوع. ثم يقرر target_group ما يجب فعله بالرسالة.

  3. المعالجة الداخلية: يمكن للفريق بعد ذلك مناقشة الملاحظات بشكل خاص، أو إشراك أطراف أخرى ذات صلة إذا لزم الأمر، أو اتخاذ إجراء. يمكن استخدام هذه الملاحظات لملاحظات التصويت أو اقتراحات مجهولة أخرى.

  4. أفضل ممارسة للملاحظات غير اللائقة: إذا كان التقديم غير لائق، يمكن للفريق ببساطة حذفه. يمكنك النظر في نشر إشعار عام عام (مثلًا في فئة “أخبار”) يوضح أن “الملاحظات المستلمة في [التاريخ] لم تتم معالجتها لأنها انتهكت معاييرنا المجتمعية للتواصل المحترم”. هذا يخبر المرسل دون الكشف عن أي تفاصيل ويشجعه على إعادة التقديم بطريقة أكثر بناءً. إذا كان منشورًا للوحة البيضاء (قابل للتعرف عليه بعدم وجود علامة خاصة، أو ربما بادئة إذا كان ذلك مفيدًا): يُدعى المشرفون إلى الرسالة، لكن لا أحد يرد على الرسالة. يحول المشرفون الرسالة إلى موضوع في فئة “لوحة بيضاء” → مرئية للأعضاء/المتدربين/الميسرين وغير قابلة للتعليق.

الميزات

  • نقطتا نهاية مستقلتان: توفر /anonymous-feedback و/white-board، كل منهما بإعدادات منفصلة.

  • الحماية عبر رمز الباب: كل نموذج محمي برمز باب سري خاص به لمنع البريد العشوائي. رمز الباب هو نفسه للجميع، ويمكن استخدام الصفحة أيضًا في الوضع الخاص أو على جهاز الكمبيوتر الخاص بالوالدين.

  • مجموعة هدف قابلة للتكوين: تُرسل الرسائل من كل نموذج كرسالة خاصة إلى مجموعة مستخدمين محددة وقابلة للتكوين.

  • جلسة لمرة واحدة: بعد إرسال رسالة بنجاح، يتم إعادة توجيه المستخدم مرة أخرى إلى شاشة رمز الباب. يجب عليه إدخال الرمز مرة أخرى لإرسال رسالة أخرى، مما يمنع البريد العشوائي البسيط متعدد المنشورات. بعد الإرسال، تعود إلى رمز الباب، ولا يمكن إجراء منشورات متعددة بسهولة.

  • تحديد معدل يحافظ على السرية: يحمي من هجمات القوة الغاشمة والبريد العشوائي دون تسجيل عناوين IP.

  • حماية البوت: يحتوي على حقل خفي من نوع honeypot لاكتشاف البوتات البسيطة.

  • مستخدم مرسل مخصص: يمكنك تحديد مستخدم بوت لكل نموذج بحيث تظهر الرسائل الخاصة وكأنها أرسلت من قبل هذا المستخدم (مثل “FeedbackBot”). يجب أن يكون المستخدم موجودًا. إذا كان فارغًا، يُستخدم مستخدم النظام افتراضيًا.

  • واجهة مستخدم نظيفة وعصرية: تستند النماذج إلى مكون Ember.js قابل لإعادة الاستخدام لتجربة مستخدم متسقة ونظيفة.

التثبيت

اتبع الدليل القياسي لتثبيت إضافات Discourse: تثبيت إضافة.

  1. أضف عنوان URL لمستودع الإضافة إلى ملف app.yml الخاص بك:

    hooks:
      after_code:
        - exec:
            cd: $home/plugins
            cmd:
              - git clone https://github.com/elRicharde/discourse-anonymous-feedback
    
  2. أعد بناء الحاوية الخاصة بك: cd /var/discourse && ./launcher rebuild app

الإعداد

بعد التثبيت، يمكنك تكوين الإضافة في إعدادات إدارة Discourse. ابحث عن “anonymous feedback”. جميع الإعدادات مستقلة لنموذجي “ملاحظات مجهولة” و"لوحة بيضاء".

الإعداد الوصف
anonymous_feedback_enabled يفعّل أو يعطل صفحة /anonymous-feedback.
white_board_enabled يفعّل أو يعطل صفحة /white-board.
... door_code كلمة المرور السرية التي يجب على المستخدمين إدخالها للوصول إلى نموذج الرسالة.
... target_group اسم مجموعة المستخدمين التي تستقبل الرسائل الخاصة. يجب أن تكون هذه المجموعة موجودة.
... rate_limit_per_hour حد عالمي لعدد الرسائل التي يمكن إرسالها في الساعة لمنع إساءة الاستخدام. اضبط على 0 لتعطيله.
... max_message_length الحد الأقصى لعدد الأحرف المسموح بها في نص الرسالة.
... hmac_rotation_hours عدد المرات التي يتم فيها تدوير المفتاح السري لتحديد المعدل. مدة أقصر تعيد تعيين أقفال القوة الغاشمة بشكل أسرع ولكنها أقل أمانًا قليلاً.
... bot_username اختياري. اسم المستخدم للمستخدم الذي سيرسل الرسالة الخاصة. يجب أن يكون المستخدم موجودًا. إذا كان فارغًا، يُستخدم مستخدم النظام.

التطوير / البنية

  • الواجهة الخلفية: وحدة تحكم واحدة Ruby on Rails، AnonymousFeedbackController، تعالج جميع الطلبات لكلا نقطتي النهاية. تستخدم طريقة kind التي تتحقق من مسار الطلب (/anonymous-feedback مقابل /white-board) لتحديد أي الإعدادات يجب استخدامها. هذا يتجنب تكرار الكود. تساعد أداة setting الديناميكية في تبسيط قراءة الإعدادات.

  • الواجهة الأمامية: تستند واجهة المستخدم إلى مكون Ember.js واحد قابل لإعادة الاستخدام، <AnonymousFeedbackForm />.

    • يحتوي هذا المكون على منطق HTML وCSS وJavascript الكامل لحالة النموذج (فتح القفل، الإرسال، معالجة الأخطاء).

    • قوالب المسارات (anonymous-feedback.hbs وwhite-board.hbs) بسيطة للغاية الآن. تقوم فقط بتفعيل هذا المكون ونقل المعاملات الصحيحة (مثل العنوان، عناوين URL لـ API). هذا النهج DRY (لا تكرر نفسك) يجعل كود الواجهة الأمامية نظيفًا وسهل الصيانة.

غوص عميق: السرية وتحديد المعدل (HMAC)

إحدى الميزات الأساسية لهذه الإضافة هي التوازن بين السرية المطلقة والحماية من إساءة الاستخدام (البريد العشوائي).

المشكلة: عناوين IP المحدودة

تتكون عناوين IPv4 من مجموعة محدودة من التوليفات (حوالي 4.3 مليار).

  • المخاطر: دوال التجزئة (مثل SHA256) هي دوال أحادية الاتجاه لا رجعة فيها. ومع ذلك، إذا قمنا بتخزين SHA256(Eنوان_IP) ببساطة، يمكن لمهاجم (أو مسؤول) حساب تجزئات جميع عناوين IP الموجودة مسبقًا (جدول قوس قزح) في ثوانٍ. من خلال مقارنة التجزئة المخزنة بقائمتهم، يمكنهم الكشف فورًا عن عنوان IP الأصلي.

الحل: HMAC مع مفتاح سري متغير

نستخدم HMAC (رمز المصادقة على الرسائل القائم على التجزئة). يجمع هذا بين الرسالة (عنوان IP) ومفتاح سري مشفر قبل التجزئة.

  • الآلية: المعرف = HMAC(عنوان_IP + المفتاح_السري)

  • لماذا يعمل: حتى لو عرف المهاجم جميع عناوين IP الممكنة، فهو لا يعرف المفتاح_السري. بدون هذا المفتاح، لا يمكنه حساب التجزئات مسبقًا. يصبح هجوم “جدول قوس قزح” مستحيلًا لأن المتغير السري مفقود.

السرية الأمامية (تدوير المفتاح)

يتم تدوير المفتاح_السري تلقائيًا (مثلًا كل 4 ساعات).

  • السيناريو: تخيل أن الخادم تم اختراقه وسرق المهاجم المفتاح_السري الحالي وقاعدة البيانات.

  • الحماية: نظرًا لأن المفتاح يتغير بانتظام ويتم تجاهل المفاتيح القديمة بشكل دائم، يمكن للمهاجم فقط حساب تجزئات عناوين IP لـ نافذة الوقت الحالية (مثل آخر 4 ساعات). جميع الأنشطة من الأمس أو الأسبوع الماضي تم تجزئتها باستخدام مفاتيح لم تعد موجودة. هذا يضمن السرية الأمامية: لا يمكن كسر السرية السابقة، حتى لو تم اختراق النظام الحالي.

التدوير السريع مقابل البطيء

يمكنك تكوين فترة التدوير (hmac_rotation_hours).

  • التدوير السريع (مثلًا 1 ساعة):

    • المزايا: أقصى قدر من السرية. نافذة الوقت التي يمكن فيها ربط أفعال مختلفة بنفس الفاعل (المجهول) قصيرة جدًا.

    • العيوب: “فقدان الذاكرة” لتحديد المعدل. عند تدوير المفتاح، “ينسى” الخادم من أرسل بالفعل رسائل. يتم إلغاء حظر المرسل العشوائي الذي تم حظره في الساعة 1 بشكل فعال في الساعة 2.

  • التدوير البطيء (مثلًا 24 ساعة):

    • المزايا: حماية أقوى ضد البريد العشوائي، حيث تستمر الحظر لفترة أطول.

    • العيوب: ضمن نافذة الـ 24 ساعة هذه، يمكن للمدير رؤية أن “المستخدم X” أرسل 5 رسائل، حتى لو لم يعرف من هو “المستخدم X” (إمكانية الربط).

التوصية: قيمة بين 4 و12 ساعة توفر توازنًا قويًا.

3 إعجابات