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

تطوير البرمجيات الآمن / متوسط: حدود التنفيذ والتحقق / الدرس 9

تقييد قدرات الملفات وفك التسلسل

معاملة بيانات الرفع وأسماء التخزين والتحليل والاسترجاع حدودا دفاعية منفصلة.

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

أهداف الدرس

  • شرح قصور الامتداد والكائن المفكوك عن إثبات الأمان.
  • تفضيل صيغ بيانات محدودة وهويات تخزين يملكها الخادم.

مراجعة دورة حياة الملف كاملة

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

فصل اسم العرض عن سلطة التخزين

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

python سياسة تسمية تخزين ضيقة دون وصول ملفات
extensions = {"schedule-json": ".json", "public-text": ".txt"}
def storage_label(server_id, kind):
    if server_id != "upload-lab-7" or kind not in extensions:
        return "INVALID_STORAGE_REQUEST"
    return server_id + extensions[kind]

assert storage_label("upload-lab-7", "schedule-json") == "upload-lab-7.json"
assert storage_label("client-path", "schedule-json") == "INVALID_STORAGE_REQUEST"
assert storage_label("upload-lab-7", "other") == "INVALID_STORAGE_REQUEST"
print("server-owned storage labels checked")
الناتج المتوقع
server-owned storage labels checked

يفحص البرنامج الكامل ثلاث حالات بيانات وصفية. فحص المعرف بيانات تدريب لا مولد إنتاج. لا ينشئ مسارات أو يثبت الاحتواء أو النوع أو الإذن أو سلامة المحتوى.

فك بيانات دون استعادة كائنات تنفيذية

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

python تحليل كائن بيانات صغير معروف والتحقق منه
import json
raw = '{"title":"Paper Gardens","minutes":45}'
value = json.loads(raw)
assert type(value) is dict
assert set(value) == {"title", "minutes"}
assert isinstance(value["title"], str) and 1 <= len(value["title"]) <= 60
assert type(value["minutes"]) is int and 1 <= value["minutes"] <= 180
accepted = {"title": value["title"], "minutes": value["minutes"]}
assert accepted["minutes"] == 45
print("bounded schedule data checked")
الناتج المتوقع
bounded schedule data checked

يحلل البرنامج الكامل سلسلة محلية ثابتة ويفحص بنية وحدودا مختارة. التأكيدات تعليمية لا واجهة معالجة أخطاء إنتاج. لا يستخدم ملفا أو مفكك كائنات أو شبكة أو حزمة محلل خارجية.

تفويض الاسترجاع وضبط التفسير اللاحق

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

اختبار كل طبقة دون تضخيم

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

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

يعتبر الامتداد دليلا للمحتوى

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

يستخدم كائن مفكوك دون فحص البنية

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

يتاح الملف لمن يعرف التسمية

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

اختبر فهمك

1. لماذا لا تكفي تسمية يملكها الخادم لاستيراد جدول خاص؟

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

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

2. نجح تحليل جدول JSON لكن minutes سلسلة نصية. ما النتيجة المطلوبة؟

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

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

أهم ما تعلمته

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

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