خيط سحري

في برمجة الحاسوب ، تُعرف السلسلة السحرية بأنها مُدخلات يعتقد المبرمج أنها لن تأتي أبدًا من مصدر خارجي، وتُفعّل وظائف مخفية. من المرجح أن يُدخل مستخدم هذا البرنامج مُدخلات تُعطي استجابة متوقعة في معظم الحالات. مع ذلك، إذا أدخل المستخدم، عن غير قصد، المُدخلات المُحددة مُسبقًا، مُستدعيًا الوظائف الداخلية، فإن استجابة البرنامج غالبًا ما تكون غير متوقعة تمامًا للمستخدم (وبالتالي تبدو "سحرية"). [ 1 ]

خلفية

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

دقة

المواقف/القضايا ذات الصلة

غالباً ما توجد قيود زمنية كبيرة خارجة عن سيطرة المطور منذ بداية مشاركته في المشروع. ومن المشكلات الشائعة التي قد تؤدي إلى هذا النمط السلبي :

  • Null  != null [ 2 ] أو أي صيغة أخرى لا تتوافق فيها قيمة نوع البيانات مع قيمة نوع آخر يفترض أنه مطابق لها. هذه مشكلة قد تحدث حتى في بيئة التطوير نفسها ( باستخدام لغة البرمجة والمترجم نفسيهما ). لهذه المشكلة تاريخ طويل مع الأنواع العددية والمنطقية، ومعظم المترجمات تتعامل معها بكفاءة (مع التحذيرات والأخطاء المناسبة، والحل الافتراضي، إلخ...). أما الأنواع القابلة للتصفير ، مثل السلاسل النصية، فتواجه صعوبة بسبب اختلاف تعريفات NULL تاريخيًا . غالبًا ما تكون الأخطاء/التحذيرات الناتجة عامة أو خطأً افتراضيًا "مناسبًا" لا يصف بدقة ما يحدث. إذا لم يتمكن المطور من الحصول على أدلة كافية لتحديد المشكلة من خلال تصحيح الأخطاء ، فقد يكون الحل الوحيد هو كتابة سلسلة نصية "افتراضية" كحل سريع للحفاظ على سير المشروع وفق الجدول الزمني. أحد الحلول الممكنة هو تطبيق نمط الكائن الفارغ [ 3 ] .
  • مُبرمجة في زاوية. أحيانًا يبدو التصميم واضحًا وبسيطًا، لكن يتضح لاحقًا وجود خلل منطقي يتعلق بمدخلات المستخدم المحتملة، نتيجة لظرف غير متوقع غالبًا في نهاية مرحلة التطوير المخطط لها. لذا، قد يشعر المطور بالحاجة إلى تنفيذ مدخلات المستخدم مع مراعاة إجراءات أمنية/تشغيلية خاصة للتعامل مع هذه الظروف. قد يكون هذا مثيرًا للسخرية، إذ يتضح أحيانًا أن تصميمًا أكثر متانة منذ البداية كان سيُتيح مجالًا لمعالجة هذا الخلل. مع ذلك، قد يستغرق هذا وقتًا طويلًا للتنفيذ، وقد يتعارض مع مبدأ "البساطة هي الأفضل" في الهندسة ، والذي يُبقي التصميم والتنفيذ بسيطين، ويلبي فقط المتطلبات الأولية الضرورية.
  • السماح بالوصول الخارجي إلى علامة عامة . [ 4 ] إن الثقة المفرطة باستحالة ضبط علامة عامة عن طريق الخطأ أو بقصد الإضرار (وهو افتراض معقول في كثير من الأحيان) تبرر هذا التنفيذ لأغراض الاختبار والتصحيح، خاصةً للتطبيقات الصغيرة ذات الواجهات البسيطة. مع ذلك، إذا كان انتشار البرنامج واسعًا، فعادةً ما يكون ضبط العلامة مسألة وقت لا أكثر. الحل الأمثل هو عدم استخدام متغير عام بهذه الطريقة. قد يجعل المطور العلامة متاحةً عن غير قصد في ظروف معينة . لذا، سيتعامل البرنامج مع السلسلة السحرية كما يتعامل مع أي مُدخل آخر. [ 5 ] سيتعين على المستخدم حينها إعادة إنتاج الإعداد، بالإضافة إلى مجموعة الظروف أو الأحداث التي تُمكّن واجهة المستخدم من السماح للعلامة بقبول الإعداد بشكل منفصل - وهوسيناريو أقل احتمالًا (وإن كان ممكنًا).

تنسيق صارم

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

كما هو الحال مع أي عملية للتحقق من صحة المدخلات، من المهم التأكد من أن التنسيق ليس مقيدًا بطريقة تحدّ من استخدام التطبيق من قِبل بعض المستخدمين دون قصد. ومن الأمثلة على ذلك تقييد إدخال رقم الهاتف أو الرمز البريدي [ 6 ] بناءً على نظام دولة واحدة (كأن يُطلب من كل مستخدم إدخال رمز بريدي مكون من خمسة أرقام )، مما يُسبب مشاكل للمستخدمين الشرعيين المقيمين في دول أخرى.

التنفيذ الهادف

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

الحوادث

فيما يلي قائمة ببعض الحوادث المعروفة التي تسبب فيها استخدام الخيط السحري في حدوث مشاكل.

  • في عدة حالات مختلفة، تلقى سائقو السيارات الذين تحمل لوحات ترخيص سياراتهم رموزًا شخصية مخالفات مرورية خاطئة . في أنظمة المخالفات المتأثرة، عندما كان ضباط الشرطة يحررون مخالفة مرورية لسيارة بدون لوحة ترخيص، كانوا يكتبون "بدون لوحة" أو "لا يوجد ملصق" أو "مفقود" أو ما شابه. تسبب هذا في مشاكل عندما مُنح سائقو السيارات لوحات ترخيص فعلية بهذه الرموز، وبالتالي بدأوا بتلقي العديد من المخالفات المرورية المخصصة لهذه السيارات التي لا تحمل لوحات. [ 8 ]
  • في عام 1999، كشف قراصنة عن ثغرة أمنية في خدمة هوتميل سمحت لأي شخص بتسجيل الدخول إلى أي حساب هوتميل باستخدام كلمة المرور "eh". وقد وُصفت حينها بأنها "أكثر حادثة أمنية انتشارًا في تاريخ الإنترنت". [ 9 ]
  • أبلغ أشخاص يحملون اسم عائلة Null عن مشاكل متنوعة في استخدام الأنظمة الإلكترونية، مثل عدم القدرة على حجز تذاكر الطيران، أو استخدام مواقع الضرائب الحكومية، أو دفع فواتير الخدمات. [ 10 ] ينشأ هذا الإشكال من خلط هذه الأنظمة بين اسمهم ومؤشر فارغ (null pointer) . وبحسب النظام، قد يؤدي ذلك إلى عدم عرض اسم المستخدم، أو مطالبته بإدخال اسم آخر (مع رسالة أحيانًا تفيد بأن حقل الاسم فارغ)، أو عرض رسالة خطأ . [ 11 ]

انظر أيضاً

مراجع

  1. كريس فالتر (6 مارس 2008)، حل جيد لبيانات السلاسل السحرية ، دروس مقهى إيغ هيد، مؤرشف من الأصل في 13 نوفمبر 2009 ، تم استرجاعه في 11 مايو 2009
  2. وانغ لام (21 مايو 2003)، سلوك القيم الفارغة في لغة SQL ، جامعة ستانفورد ، تم الاطلاع عليه في 13 مايو 2009
  3. إريك فريمان، إليزابيث فريمان، كاثي سييرا، بيرت بيتس؛ 2004، كتاب "أنماط التصميم من البداية" ، الطبعة الأولى، دار نشر أورايلي، الفصل 6، صفحة 214، نمط الأوامر ، رقم ISBN 0-596-00712-4، ISBN 978-0-596-00712-6
  4. جيمس مكافري (2009)، أتمتة الاختبار لتطبيقات الويب ASP.NET مع SSL ، مايكروسوفت ، تم الاطلاع عليه في 13 مايو 2009
  5. أندرو كامينغ؛ 2007، اختراقات SQL ، الطبعة الأولى، أورايلي، صفحة 174، منع هجوم حقن SQL ، ISBN 0-596-52799-3، ISBN 978-0-596-52799-0
  6. برايان نايت، آلان ميتشل، دارين غرين، دوغلاس هينسون، كاثي كيلينبيرغر؛ 2005، خدمات تكامل SQL Server 2005 الاحترافية ، الطبعة الأولى، جون وايلي وأولاده، الفصل 5، صفحة 129، التعامل مع البيانات غير النظيفة ، ISBN 0-7645-8435-9، ISBN 978-0-7645-8435-0
  7. سيزين، تونغوتش إبراهيم؛ إيسيكوغلو، ديغديم (27 أبريل 2007). "من الأوزان إلى أنماط الإله: الغش في الترفيه التفاعلي من ثقافات مختلفة" (ملف PDF) . ص 8. تم الاطلاع عليه في 24 يناير 2009 . 
  8. 1 2 "ماذا يحدث عندما تقول لوحة ترخيص سيارتك 'لا توجد لوحة'؟" . 30 أكتوبر 1999.
  9. جلاف، جيمس (30 أغسطس 1999). "مخترقو هوتميل: 'لقد فعلناها'"" . Wired . Condé Nast . تم الاطلاع عليه في 16 يوليو 2024 .
  10. بارانيوك، كريس (25 مارس 2016). "هؤلاء الأشخاص التعساء لديهم أسماء تُعطّل أجهزة الكمبيوتر" . BBC.com . تم الاطلاع عليه في 30 يناير 2022 .
  11. نول، كريستوفر (5 نوفمبر 2015). "مرحباً، أنا السيد نول. اسمي يجعلني غير مرئي لأجهزة الكمبيوتر" . وايرد . تم الاطلاع عليه في 30 يناير 2022 .