فشل التحقق من اسم المستخدم (الروسية) Unicode بشكل عشوائي

تفشل أحيانًا عملية التحقق من صحة أسماء المستخدمين التي تحتوي على أحرف روسية، مثل фыв (غير متأكد مما إذا كان الأمر يعتمد على أحرف معينة).

تم الاختبار على أحدث إصدار من متصفحي Chrome و Firefox على نظام Ubuntu 19.10، وإصدار Discourse هو 2.4.0.beta8 (16de46f8d4).

يبدو أن طلب HTTP يبقى دائمًا كما هو لهذه الأحرف الثلاثة، وقد تم إعادة إنتاجه عبر التكرار عدة مرات في وحدة تحكم DevTools:

fetch('/u/check_username?username=%D1%84%D1%8B%D0%B2\u0026email=', {headers: {'X-Requested-With': 'XMLHttpRequest'}}).then(r =\u003e r.json()).then(console.log)

تمت تجربة تعيين قائمة بيضاء للأحرف unicode [йцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮёЁ]، لكن دون أي تأثير.

@gerhard هل لديك أي فكرة عما يحدث هنا؟ هل تعبيرنا النمطي للغة الروسية غير صحيح؟

لا أستطيع تكرار المشكلة. هل من الممكن أن تكون قد أدخلت نوعًا من المسافات البيضاء غير المرئية أو شيء مشابه عند ظهور رسالة الخطأ التي تنص على “يجب أن تتضمن أرقامًا وحروفًا وشرطات ونقاطًا وشرطات سفلية فقط”؟

يتم تنفيذ فحص اسم المستخدم على الخادم، لذا إذا كانت هناك مشكلة في التعبير النمطي، فيجب أن تنتج دائمًا نفس النتائج لنفس المدخلات.

إعجابَين (2)

نعم، لهذا السبب الأمر غريب.

ظننت أنه قد يكون مرتبطًا بنوع من تحديد المعدل (rate limiting)، لكنني حصلت على الخطأ حتى بعد توقف طويل (دقيقتين) في الطلب الأول، ثم نجح الطلب الثالث خلال بضع ثوانٍ.

يمكنني تكرار المشكلة بتنفيذ الكود أعلاه في أدوات المطور (DevTools).

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

إعجابَين (2)

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

بالمناسبة، إذا كان أي شخص يبحث عن طريقة أبسط لإضافة الحروف الروسية إلى القائمة البيضاء، يبدو أن هذا التعبير النمطي يعمل: [\p{Cyrillic}]

إعجاب واحد (1)