نستخدم SSO، ومنذ بضعة أيام، أبلغ بعض الأعضاء عن عدم قدرتهم على الدخول إلى حساباتهم مع ظهور الخطأ التالي:
هناك مشكلة في حسابك. يرجى التواصل مع مسؤول الموقع
ظننت أن هذا قد يكون بسبب مشكلة أبلغت عنها سابقًا في هذه الرابط، لذا تحققت مما إذا كان عنوان IP الخاص بهم مدرجًا ضمن عناوين IP المحجوبة (Screened IPs): كان أحدها مدرجًا… لكن ليس جميع الآخرين.
بعد تفعيل verbose sso logging، طلبت من مستخدمين آخرين المحاولة مرة أخرى، وتظهر السجلات أن عنوان IP الخاص بهم محظور:
Verbose SSO log: IP address is blocked xxx.xxx.xxx.xxx
ومع ذلك، قمت بالتحقق مرة أخرى، ولم يظهر عنوان IP ضمن قائمة عناوين IP المحجوبة. كما تحققت مباشرة من جدول PostgreSQL screened_ip_addresses ولم أجد أي إدخال لعنوان IP هذا.
بدأت نفاد الأفكار… هل هناك قسم آخر لحظر عناوين IP يجب أن نتفحصه؟ أم أن عناوين IP تُضاف إلى قائمة عناوين IP المحجوبة لفترة قصيرة جدًا ولا أستطيع رصدها بعد التقرير (بضعة ساعات فقط)؟
وللتوضيح، نحن لا نضيف أي عناوين IP إلى قائمة عناوين IP المحجوبة يدويًا — بل يبدو أنها تُضاف تلقائيًا عند إغلاق حساب شخص ما عبر الـ API (انظر الرابط أعلاه)، ولم نتمكن حتى الآن من منع هذا الحدوث باستخدام معامل block_ip: false الموثق.
مشكلة إضافة عناوين IP إلى عناوين IP المحجوبة هي قضية منفصلة عن ما أحاول الإبلاغ عنه هنا. نحن نلاحظ أن الأعضاء غير محجوبين بواسطة عناوين IP المحجوبة، لكنهم لا يستطيعون تسجيل الدخول إلى حساباتهم عبر SSO، allegedly لأن “عنوان IP محجوب”.
هل توجد أماكن أخرى غير عناوين IP المحجوبة قد تحجب عناوين IP يجب أن أبحث فيها؟
يبدو أنك تستدعي دالة “حذف كمُرسِل رسائل غير مرغوب فيها”، والتي ستقوم تلقائيًا بإضافة عنوان IP وعنوان البريد الإلكتروني إلى القائمة السوداء. أعتقد أنه يجب عليك مراجعة هذا الكود. أنت تريد “حذفًا عاديًا” وفقًا لواجهة المستخدم، وليس “حذفًا كمُرسِل رسائل غير مرغوب فيها”.
قد يكون هذا صحيحًا، لكننا نناقش كيفية حذف المستخدمين هنا.
غير متأكد ما إذا كانت هذه مشكلة منفصلة، لكنني لاحظت أن عمود “التطابقات” في قسم عناوين IP المحجوبة يُظهر 0 تطابق في جميع الإدخالات. لقد راجعت تصدير جدول ذلك، وقد أكد أن جميع عناوين IP لديها 0 تطابق. ومع ذلك، نرى كل يوم أن المستخدمين يُحجَبون عن تسجيل الدخول عبر عنوان IP (عبر SSO).
ومع ذلك، عند النظر في عناوين البريد الإلكتروني المحجوبة، فإن معظمها يحتوي على تطابق! كما أن هناك عمودًا لعناوين IP هناك أيضًا… لذا ظننت أنني وجدت السبب، لكن لا أحد من عناوين IP التي يتم حجبها مدرج هناك أيضًا.
لقد راجعت أيضًا عناوين البريد الإلكتروني المحجوبة، ولم يتم العثور على عنوان IP أو عنوان البريد الإلكتروني للحساب الذي تم منعه للتو من تسجيل الدخول في أي منهما.
أعتقد أنني وجدت المشكلة هنا (في النهاية كانت المشكلة من جانبنا)، لكن هناك بعض الأخطاء التي يجب الإبلاغ عنها، رغم أنني لست مرتاحًا تمامًا مع هذه التقنية، لذا آمل أن يتمكن شخص ما من إلقاء نظرة أفضل.
أولاً، السبب. عند النظر مباشرة في جدول قاعدة البيانات screened_ip_addresses، وجدت أنه كان يحظر كتلتين كاملتين لا ينبغي حظرهما (176.59.0.0/16 و 109.252.0.0/16). بصراحة، لا أعرف كيف تمت إضافتهما، وكان الإدخالا موجودين منذ فبراير. هل يوجد أي زر في لوحة إدارة Discourse لحظر كتلة /16 كاملة دفعة واحدة!؟
على أي حال، من المرجح أن يكون هذا هو السبب الرئيسي للمشكلة الأولية. لا تزال هناك بعض القضايا التي قد يرغب فريق Discourse في النظر فيها، حيث كان هذا ما جعل حلها صعبًا بشكل خاص:
هذه النطاقات المحظورة لا تظهر في قائمة عناوين IP المحجوبة لسبب ما. اضطررت إلى البحث مباشرة في قاعدة البيانات لإيجادها. ومع ذلك، يظهر البحث باستخدام “176.59” أو “109.252” هذه المدخلات. هل هناك حد لعدد النتائج يُطبق على /admin/logs/screened_ip_addresses؟
في ملف التصدير، تظهر كـ 176.59.0.0 و 109.252.0.0، أي أنها لا تعرض أي معلومات حول الكتلة. هذا صحيح حتى بالنسبة للنطاقات الافتراضية (127.0.0.0/8، 10.0.0.0/8، إلخ) — فلا توجد قناع يُعرض في ملف التصدير.
رغم أن هذه المدخلات كانت تحظر المستخدمين، إلا أن قيمة match_count تساوي 0 و last_match_at فارغة (للجدول بأكمله). هل هذا مقصود؟ ربما لا يرغب أحد في حساب جميع تطابقات allow، لكن إذا لم يتم حساب الحظر، فإن هذه الأعمدة تبدو غير مستخدمة/غير ضرورية. أو ربما أن تسجيل الدخول عبر SSO لا يُفعّل هذه التطابقات؟
مرة أخرى، يجب أن أخبرك أنني متأكد تقريبًا أنك تستدعي “حذف كمُرسِل رسائل غير مرغوب فيها” عبر واجهة برمجة التطبيقات (API). إذا كان هناك عدد كافٍ من عمليات الحذف لمرسلي الرسائل غير المرغوب فيها من عناوين IP ذات صلة، فإن حظر عنوان IP يبدأ في الاتساع تلقائيًا. أنا واثق جدًا من أن هذا ما تراه هنا.
وهذا، نعم. ربما يكون السبب في أن قائمة عناوين IP التي قمت بتصفيتها كبيرة جدًا هو أنك كنت تقوم بـ “الحذف كمُرسِل رسائل غير مرغوب فيها” لفترة طويلة الآن؟ لا تريد ذلك.
لم تكن المشكلة في نقطة النهاية المستخدمة، بل في المعاملات، حيث يتوقع الـ API أن تكون القيم المنطقية (bools) على شكل سلاسل نصية ‘true’/‘false’، ولم أكن على علم بذلك.
لا تزال هناك بعض الأخطاء الأخرى التي واجهتها والمذكورة أعلاه، ولا أعرف ما إذا كان سيتم معالجتها. بخلاف ذلك، يمكن إغلاق هذه القضية. شكرًا لك.