هذه المقالة هي الأولى في سلسلة من المقالات التي أكتبها حول تشغيل العديد من منتجات ومواقع SaaS على مدار السنوات الثماني الماضية. سأشارك بعض المشكلات التي تعاملت معها، والدروس التي تعلمتها، والأخطاء التي ارتكبتها، وربما بعض الأشياء التي سارت على ما يرام. اسمحوا لي أن أعرف ما رأيك!
في عام 2019 أو 2020، قررت إعادة كتابة الواجهة الخلفية بالكامل كتلة المرسل، وهو تطبيق SaaS يساعد المستخدمين على إنشاء كتل بريد إلكتروني أفضل، من بين ميزات أخرى. وفي هذه العملية، أضفت بعض الميزات الجديدة وقمت بالترقية إلى تقنيات أكثر حداثة. لقد أجريت الاختبارات، ونشرت الكود، واختبرت كل شيء يدويًا في الإنتاج، وبخلاف بعض الاحتمالات والنهايات العشوائية، بدا أن كل شيء يعمل بشكل رائع. كنت أتمنى أن تكون هذه نهاية القصة، لكن...
وبعد بضعة أسابيع، أبلغني أحد العملاء (وهو أمر محرج في حد ذاته) أن الخدمة لا تعمل وأنهم كانوا يتلقون الكثير من رسائل البريد الإلكتروني التي يجب حظرها في صندوق الوارد الخاص بهم، لذلك قمت بالتحقيق في الأمر. ترجع هذه المشكلة في كثير من الأحيان إلى قيام Google بإزالة الاتصال من خدمتنا إلى حساب المستخدم، وهو ما يعالجه النظام عن طريق إخطار المستخدم عبر البريد الإلكتروني ومطالبته بإعادة الاتصال، ولكن هذه المرة كان الأمر مختلفًا.
يبدو أن عامل الواجهة الخلفية الذي يتولى فحص رسائل البريد الإلكتروني مقابل كتل المستخدم يستمر في التعطل كل 5 إلى 10 دقائق. أغرب ما في الأمر هو أنه لم تكن هناك أخطاء في السجلات، وكانت الذاكرة جيدة، ولكن وحدة المعالجة المركزية كانت ترتفع أحيانًا في أوقات عشوائية على ما يبدو. لذا، خلال الـ 24 ساعة التالية (مع استراحة مدتها 3 ساعات للنوم - آسفون أيها العملاء 😬)، اضطررت إلى إعادة تشغيل العامل يدويًا في كل مرة يتعطل فيها. لسبب ما، كانت خدمة Elastic Beanstalk تنتظر فترة طويلة جدًا لإعادة التشغيل، ولهذا السبب اضطررت إلى القيام بذلك يدويًا.
دائمًا ما يكون تصحيح الأخطاء في الإنتاج أمرًا مؤلمًا، خاصة وأنني لم أتمكن من إعادة إنتاج المشكلة محليًا، ناهيك عن معرفة سببها. لذا، مثل أي مطور "جيد"، بدأت للتو في التسجيل كل شىء وانتظر حتى يتعطل الخادم مرة أخرى. نظرًا لأن وحدة المعالجة المركزية كانت ترتفع بشكل دوري، اعتقدت أنها ليست مشكلة ماكرو (مثل عند نفاد الذاكرة) وربما كان السبب فيها بريدًا إلكترونيًا أو مستخدمًا محددًا. لذلك حاولت تضييق نطاقها:
- هل تعطل معرف أو نوع بريد إلكتروني معين؟
- هل كان يتعطل لعميل معين؟
- هل كان يتعطل في فترة زمنية منتظمة؟
بعد ساعات من هذا، والتحديق في السجلات لفترة أطول مما كنت أهتم به، في النهاية، قمت بتضييق نطاق الأمر إلى عميل محدد. ومن هناك، ضاقت مساحة البحث قليلاً - على الأرجح كانت قاعدة حظر أو بريدًا إلكترونيًا محددًا استمر خادمنا في إعادة المحاولة عليه. لحسن الحظ بالنسبة لي، كان الأمر الأول، وهي مشكلة أسهل بكثير في تصحيح الأخطاء نظرًا لأننا شركة تركز بشدة على الخصوصية ولا نقوم بتخزين أو عرض أي بيانات بريد إلكتروني.
قبل أن نتطرق إلى المشكلة بالضبط، دعونا نتحدث أولاً عن إحدى ميزات Block Sender. في ذلك الوقت كان لدي العديد من العملاء الذين يطلبون حظر أحرف البدل، مما يسمح لهم بحظر أنواع معينة من عناوين البريد الإلكتروني التي تتبع نفس النمط. على سبيل المثال، إذا كنت تريد حظر جميع رسائل البريد الإلكتروني من عناوين البريد الإلكتروني التسويقية، فيمكنك استخدام حرف البدل marketing@*
وسيقوم بحظر جميع رسائل البريد الإلكتروني من أي عنوان يبدأ بـ marketing@
.
شيء واحد لم أفكر فيه هو أنه لا يفهم الجميع كيفية عمل أحرف البدل. لقد افترضت أن معظم الناس سيستخدمونها بنفس الطريقة التي أستخدمها كمطور، باستخدام واحدة *
لتمثيل أي عدد من الشخصيات. لسوء الحظ، هذا المستخدم بالذات افترض أنك بحاجة إلى استخدامه حرف بدل واحد لكل شخصية تريد مطابقتها. في حالتهم، أرادوا حظر جميع رسائل البريد الإلكتروني من مجال معين (وهي ميزة أصلية يمتلكها Block Sender، لكن من المؤكد أنهم لم يدركوا ذلك، وهي مشكلة كاملة في حد ذاتها). لذلك بدلا من استخدام *@example.com
، استعملوا **********@example.com
.
وجهة نظر: مشاهدة المستخدمين يستخدمون تطبيقك...
للتعامل مع أحرف البدل على الخادم العامل لدينا، نستخدم مكتبة Node.js المنظر، مما يساعد في المطابقة الشاملة عن طريق تحويلها إلى تعبير عادي. ستتحول هذه المكتبة بعد ذلك **********@example.com
إلى شيء مثل التعبير العادي التالي:
/[sS]*[sS]*[sS]*[sS]*[sS]*[sS]*[sS]*[sS]*[sS]*[sS]*@example.com/i
إذا كان لديك أي خبرة في التعبير العادي، فأنت تعلم أنه يمكن أن يصبح معقدًا للغاية بسرعة كبيرة، خاصة على المستوى الحسابي. إن مطابقة التعبير أعلاه مع أي طول معقول من النص تصبح مكلفة للغاية من الناحية الحسابية، مما يؤدي في النهاية إلى ربط وحدة المعالجة المركزية بخادمنا العامل. ولهذا السبب يتعطل الخادم كل بضع دقائق؛ قد تتعثر محاولة مطابقة تعبير عادي معقد بعنوان بريد إلكتروني. لذا، في كل مرة يتلقى فيها هذا المستخدم رسالة بريد إلكتروني، بالإضافة إلى جميع عمليات إعادة المحاولة التي قمنا بها للتعامل مع حالات الفشل المؤقتة، فإن ذلك سيؤدي إلى تعطل خادمنا.
فكيف أصلحت هذا؟ من الواضح أن الحل السريع كان يتمثل في العثور على جميع الكتل التي تحتوي على أحرف بدل متعددة على التوالي وتصحيحها. لكنني كنت بحاجة أيضًا إلى القيام بعمل أفضل لتطهير مدخلات المستخدم. يمكن لأي مستخدم إدخال regex وإنزال النظام بأكمله باستخدام ملف هجوم ReDoS.
تحقق من دليلنا العملي العملي لتعلم Git ، مع أفضل الممارسات ، والمعايير المقبولة في الصناعة ، وورقة الغش المضمنة. توقف عن أوامر Googling Git وفي الواقع تعلم ذلك!
كان التعامل مع هذه الحالة بالذات أمرًا بسيطًا إلى حد ما – قم بإزالة أحرف البدل المتعاقبة:
block = block.replace(/*+/g, '*')
ولكن هذا لا يزال يترك التطبيق مفتوحًا لأنواع أخرى من هجمات ReDoS. لحسن الحظ، هناك عدد من الحزم/المكتبات لمساعدتنا في هذه الأنواع أيضًا:
باستخدام مجموعة من الحلول المذكورة أعلاه، وغيرها من الضمانات، تمكنت من منع حدوث ذلك مرة أخرى. ولكنه كان بمثابة تذكير جيد بأنه لا يمكنك أبدًا الوثوق بإدخال المستخدم، ويجب عليك دائمًا تعقيمه قبل استخدامه في تطبيقك. لم أكن أعلم حتى أن هذه مشكلة محتملة حتى حدثت لي، لذا آمل أن يساعد هذا شخصًا آخر على تجنب نفس المشكلة.
هل لديك أي أسئلة أو تعليقات أو ترغب في مشاركة قصة خاصة بك؟ تواصل معنا تويتر!
- محتوى مدعوم من تحسين محركات البحث وتوزيع العلاقات العامة. تضخيم اليوم.
- PlatoData.Network Vertical Generative Ai. تمكين نفسك. الوصول هنا.
- أفلاطونايستريم. ذكاء Web3. تضخيم المعرفة. الوصول هنا.
- أفلاطون كربون، كلينتك ، الطاقة، بيئة، شمسي، إدارة المخلفات. الوصول هنا.
- أفلاطون هيلث. التكنولوجيا الحيوية وذكاء التجارب السريرية. الوصول هنا.
- المصدر https://stackabuse.com/behind-the-scenes-never-trust-user-input/
- :لديها
- :يكون
- :ليس
- $ UP
- 1
- 20
- 2019
- 2020
- 24
- 8
- a
- ماهرون
- من نحن
- فوق
- حسابي
- في الواقع
- وأضاف
- إضافة
- العنوان
- عناوين
- مرة أخرى
- ضد
- الكل
- السماح
- وحده
- أيضا
- دائما
- من بين
- an
- و
- أي وقت
- التطبيق
- تطبيق
- هي
- البند
- AS
- يسأل
- يفترض
- At
- الهجمات
- تجنب
- علم
- الخلفية
- BE
- شجرة الفاصولياء
- يصبح
- كان
- قبل
- وراء
- خلف الكواليس
- يجري
- أفضل
- قطعة
- حظر
- حجب
- Blocks
- الحدود
- استراحة
- بنيت
- لكن
- by
- CAN
- يستطيع الحصول على
- يهمني
- حقيبة
- تسبب
- مما تسبب في
- معين
- حرف
- الأحرف
- تدقيق
- الكود
- مجموعة
- تعليقات
- حول الشركة
- مجمع
- معقد
- الحسابية
- صلة
- تصحيح
- استطاع
- كولدن
- تحطم
- تحطم
- تحطمها
- خلق
- زبون
- العملاء
- البيانات
- التعامل
- قررت
- نشر
- المطور
- فعل
- ديدن
- do
- نطاق
- دون
- إلى أسفل
- اثنان
- كل
- أسهل
- آخر
- البريد الإلكتروني
- رسائل البريد الإلكتروني
- النهاية
- انتهى
- ينتهي
- أدخل
- كامل
- أخطاء
- خاصة
- حتى
- في النهاية
- كل
- كل شخص
- كل شىء
- مثال
- ذو تكلفة باهظة
- الخبره في مجال الغطس
- التعبير
- الفشل
- بإنصاف
- بعيدا
- الميزات
- المميزات
- قليل
- الشكل
- أحسب
- نهاية
- الاسم الأول
- حل
- تركز
- يتبع
- متابعيك
- في حالة
- سابق
- تبدأ من
- دولار فقط واحصل على خصم XNUMX% على جميع
- الحصول على
- GIF
- بوابة
- معطى
- خير
- شراء مراجعات جوجل
- عظيم
- توجيه
- كان
- مقبض
- مقابض
- تشابك الايدى
- حدث
- حدث
- يملك
- مساعدة
- يساعد
- نأمل
- ساعات العمل
- تحوم
- كيفية
- HTTPS
- i
- ID
- if
- in
- شامل
- إدخال
- بدلًا من ذلك
- إلى
- قضية
- مسائل
- IT
- نفسها
- وظيفة
- م
- أبقى
- علم
- اسم العائلة
- الى وقت لاحق
- تعلم
- تعلم
- الطول
- الدروس
- اسمحوا
- مستوى
- LG
- المكتبة
- مثل
- على الأرجح
- ll
- محليا
- تسجيل
- طويل
- يعد
- بدا
- الكثير
- الماكرو
- صنع
- يدويا
- كثير
- التسويق
- مباراة
- مطابقة
- يمكن
- me
- مكبر الصوت : يدعم، مع دعم ميكروفون مدمج لمنع الضوضاء
- دقيقة
- الأخطاء
- تقدم
- التقنيات الحديثة
- الأكثر من ذلك
- أكثر
- كثيرا
- متعدد
- يجب
- ضيق
- محلي
- بحاجة
- أبدا
- جديد
- مزايا جديدة
- التالي
- لا
- العقدة
- نود.جي إس
- الإخطار
- عدد
- خلاف
- of
- on
- ONE
- جاكيت
- or
- أخرى
- لنا
- خارج
- الخاصة
- الم
- جزء
- خاص
- نمط
- مجتمع
- أفلاطون
- الذكاء افلاطون البيانات
- أفلاطون داتا
- المنشورات
- محتمل
- عملية
- منع
- المحتمل
- المشكلة
- عملية المعالجة
- الإنتــاج
- المنتجات
- الأسئلة المتكررة
- سريع
- بسرعة
- تماما
- عشوائية
- RE
- الوصول
- أدركت
- سبب
- معقول
- تلقى
- إعادة الاتصال
- رجإكس
- منتظم
- تذكير
- إزالة
- إزالة
- مثل
- حق
- حلقة
- قاعدة
- يجري
- تشغيل
- s
- ادارة العلاقات مع
- الضمانات
- نفسه
- مشاهد
- بحث
- بدت
- على ما يبدو
- مرسل
- مسلسلات
- الخادم
- الخدمة
- شادو
- مشاركة
- مشاركة
- ورقة
- ينبغي
- الاشارات
- منذ
- النوم
- So
- الحلول
- بعض
- شخص ما
- شيء
- الفضاء
- محدد
- مسمار
- ستاكابوز
- المعايير
- بدأت
- لا يزال
- قلة النوم
- متجر
- قصتنا
- نظام
- أخذ
- حديث
- التكنولوجيا
- مؤقت
- اختبار
- اختبارات
- نص
- من
- أن
- •
- من مشاركة
- منهم
- then
- هناك.
- تشبه
- هم
- شيء
- الأشياء
- اعتقد
- الوقت
- مرات
- إلى
- جدا
- انتقال
- حاول
- الثقة
- يحاول
- منعطف أو دور
- تحول
- نوع
- أنواع
- يفهم
- لسوء الحظ
- حتى
- ترقية
- us
- تستخدم
- مستعمل
- مستخدم
- المستخدمين
- استخدام
- مختلف
- Ve
- جدا
- بواسطة
- المزيد
- انتظار
- تريد
- مطلوب
- وكان
- لم يكن
- مراقبة
- طريق..
- we
- المواقع
- أسابيع
- حسن
- ذهب
- كان
- ابحث عن
- متى
- التي
- كامل
- لماذا
- ويكيبيديا
- رغبة
- مع
- للعمل
- عامل
- عامل
- سوف
- جاري الكتابة
- سنوات
- أنت
- حل متجر العقارات الشامل الخاص بك في جورجيا
- زفيرنت