محتويات الدورة

أمان الويب / الأساسي: عقود الثقة والهوية في الويب / الدرس 6

التحقق والتحليل والصيغ المعيارية

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

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • افصل حدود النقل والتحليل والمخطط وقواعد الأعمال.
  • حدد التطبيع والتعامل مع الحقول المجهولة بقصد.

تحقق من كل طبقة لغرضها

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

استخدم عقد مخطط محلياً دقيقاً

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

python فحص كامل سليم لشكل الإدخال
def valid_export(value):
    return (isinstance(value, dict)
            and set(value) == {"title", "copies"}
            and isinstance(value["title"], str)
            and 1 <= len(value["title"].strip()) <= 80
            and type(value["copies"]) is int
            and 1 <= value["copies"] <= 5)

assert valid_export({"title": "Notes", "copies": 2})
assert not valid_export({"title": "Notes", "copies": True})
assert not valid_export({"title": " ", "copies": 2})

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

طبّع وفق سياسة خاصة بالحقل فقط

يوحد التطبيع المقارنة، لكن التحويل المهمل قد يغير المعنى أو يخلق تصادماً. حدد أهمية حالة الحرف وUnicode والمسافة والفاصل والترميز لكل حقل؛ يختلف اسم العرض والمعرّف الداخلي. لا تصغر كل قيمة لأن اسم مستخدم بعينه غير حساس للحالة. تحقق من التمثيل المطبع واحفظ الأصل حيث يطلب المنتج والخصوصية. قد تختلف مراحل الفك عبر الوكيل والإطار؛ فحدد مالك التفسير بدلاً من التحويل المتكرر في كل طبقة.

حدد المجهول وسلوك الفشل

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

json سجل تخطيط محلي لعقد الإدخال
{
  "schema": "lab-note-export-v1",
  "allowedFields": ["title", "copies"],
  "unknownFields": "reject",
  "serverOwnedFields": ["organization", "createdBy", "permission"],
  "outsideThisExample": ["transport-size", "authentication", "authorization", "output-context"]
}

JSON توثيق لا إعداد إطار؛ لا يمنح وصولاً أو يحلل طلباً. تأتي الحقول المملوكة للخادم من سياق موثوق حتى لو قدم العميل قيماً بأسماء مماثلة.

اختبر الحدود والتحويل ببيانات عادية

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

الأخطاء الشائعة وإصلاحها

تُقبل قيمة منطقية كعدد صحيح

لماذا يحدث؟
تختلف علاقة الأنواع عن قاعدة المجال.
كيف تصلحه؟
افحص النوع والمدى المقصودين.
كيف تتجنب تكراره؟
ضمّن حدود اللغة.

يغير التطبيع معرّفاً مشروعاً

لماذا يحدث؟
يتجاهل التحويل العام معنى الحقل.
كيف تصلحه؟
حدد وطبق سياسة خاصة بالحقل.
كيف تتجنب تكراره؟
اختبر التصادم والعالمي الصحيح.

يستبدل الطلب حقلاً مملوكاً للخادم

لماذا يحدث؟
أسند الكل دون قائمة وسياسة.
كيف تصلحه؟
اختر المسموح واشتق السلطة من الموثوق.
كيف تتجنب تكراره؟
راجع الربط والدوام معاً.

اختبر فهمك

1. اجتاز العنوان الشكل. هل يربط بـ SQL أو HTML خام؟

اعرض الحل المشروح

لا؛ تختلف صحة الأعمال عن سلامة التفسير. استخدم واجهات قاعدة بمعلمات ومعالجة مخرجات مناسبة، وافرض الإذن مستقلاً. حتى القيمة الصحيحة قد تحتاج ترميزاً أو ربطاً منظماً عند وجهتها؛ لا يجعلها قبول المخطط جزءاً آمناً من SQL أو HTML الخام.

2. لماذا يختبر نص صحيح غير إنجليزي؟

اعرض الحل المشروح

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

أهم ما تعلمته

  • للتحقق طبقات تحليل وشكل وأعمال.
  • يحفظ التطبيع عقد الحقل.
  • تحتاج البيانات الصحيحة إذناً وتفسيراً آمناً.

المراجع الرسمية