C# / المتقدم: الأعمار والتزامن وتصميم التنفيذ / الدرس 18
حدود الأمن والتنفيذ والإصدار
تحقق من المدخل المعادي وافتراضات الإصدار مع توضيح الأسرار والانعكاس وحدود الموارد ومسؤوليات النشر.
في هذه الصفحة
أهداف الدرس
- استخدام قوائم سماح ومقارنة بروتوكول محددة الثقافة.
- حفظ عقود الأسرار والعمليات التشفيرية.
- تسجيل افتراضات التنفيذ والاعتماد والتقليص والنشر.
سلامة النوع طبقة واحدة لسلامة المدخل
تمنع أنواع C# كثيرا من العمليات غير الصالحة، لكن النص الصحيح نوعيا قد يحتوي فعلا غير مخول أو حمولة هائلة أو تجاوز مسار أو سرا. حدد حد الثقة وافصل التحقق من الصياغة والحجم والمجال والتفويض. تحدد المصادقة هوية الطرف، ويقرر التفويض ما يسمح له بفعله؛ ولا يؤدي محلل البيانات الوظيفتين.
فضل قائمة سماح عندما تكون مفردات الأوامر صغيرة، ولا تمرر النص الخام إلى تشغيل عملية أو ترجمة شيفرة ديناميكية أو انعكاس غير مقيد. ينبغي لاسم الفعل اختيار عملية معرفة مسبقا ذات معاملات محددة الأنواع، لا أن يصبح صياغة تنفيذ. تصنف عروض الدورة بيانات اصطناعية ولا تطلق أوامر خارجية.
استخدام قواعد ترتيبية لرموز البروتوكول
يستخدم المثال الأول مجموعة ترتيبية حساسة لحالة الأحرف تحتوي رمزين دقيقين. يرفض Preview ويقبل preview؛ وهذه سياسة مقصودة مستقلة عن ثقافة المستخدم. إذا سمح البروتوكول بتجاهل الحالة فاختر OrdinalIgnoreCase ووثق التطبيع عمدا بدلا من استخدام الثقافة المحيطة عرضا.
لا تثبت قائمة السماح أن كل طرف مصادق عليه مخول باستخدام الفعل. طبق التفويض عند الحد المالك، وافحص المعاملات المحددة الأنواع أيضا. لا تحول الفعل المجهول بصمت إلى عملية افتراضية قد تملك آثارا جانبية. اختبر المطابقات القريبة ومحارف Unicode غير المتوقعة مع الرموز المعروفة.
using System;
using System.Collections.Generic;
var allowed = new HashSet<string>(StringComparer.Ordinal) { "preview", "status" };
Console.WriteLine($"Preview={allowed.Contains("Preview")}");
Console.WriteLine($"preview={allowed.Contains("preview")}");
Preview=False
preview=True
تميز السياسة الترتيبية Preview الكبيرة من الرمز الصغير المسموح.
استخدام عملية مخصصة ضمن نطاقها
صممت CryptographicOperations.FixedTimeEquals لمقارنة متتاليات البايتات دون خروج مبكر يعتمد على المحتوى وفق شروطها الموثقة. يستخدم المثال قيما اصطناعية صغيرة غير سرية لعرض المساواة والاختلاف. لا ينفذ ذلك تخزين كلمات مرور أو مصادقة أو توقيعا أو إدارة مفاتيح؛ ويظل التعامل مع الطول والبروتوكول المحيط مسؤوليتين منفصلتين.
لا تخترع مخطط كلمات مرور بتكرار دالة تجزئة عامة سريعة. استخدم مخطط تخزين مناسبا ومراجعا عبر إطار موثوق عندما يحتاجه التطبيق. أبق المفاتيح والأسرار خارج المصدر والسجلات والاستثناءات وملفات التحليل والآثار المولدة. لا تجري هذه المادة أي عملية على بيانات اعتماد حقيقية.
using System;
using System.Security.Cryptography;
byte[] expected = { 1, 2, 3, 4 };
byte[] same = { 1, 2, 3, 4 };
byte[] different = { 1, 2, 3, 5 };
Console.WriteLine($"same={CryptographicOperations.FixedTimeEquals(expected, same)}");
Console.WriteLine($"different={CryptographicOperations.FixedTimeEquals(expected, different)}");
same=True
different=False
تبلغ العملية المساواة والاختلاف دون إنشاء نظاممصادقة.
تجنب فك غير محدود أوحامل للسلطة
لا يمنح فك البيانات الإذن بإنشاء أنواع تشغيل عشوائية أو تنفيذ استدعاءات يختارها المدخل. استخدم مخططا موثقا محدودا، وافحص الحقول المطلوبة وقيم المجال، واضبط العمق والحجم. اجعل اختيار النوع المتعدد الأشكال قائمة سماح مراجعة لا تحليلا غير مقيد لأسماء الأنواع. فضل أدوات تسلسل مدعومة ووثق سياسة التوافق.
يتفاعل الانعكاس والتحميل الديناميكي مع تقليص التطبيق والنشر الأصلي المسبق الترجمة. قد تحتاج الشيفرة التي تعمل في بناء JIT عادي إلى توصيف بياناتها الوصفية أو إعادة تصميم في تلك الأوضاع. لا تكبت تحذيرات trimming أو AOT دون حجة تشمل كل نوع وعضو مطلوب.
لأثرالإصدار عقدتنفيذودعم
سجل اختيار SDK الدقيق والإطار واللغة والاعتمادات ومعرف بيئة التنفيذ ووضع النشر. يحتاج framework-dependent إلى تنفيذ مناسب ومدعوم، بينما يتضمن self-contained مكونات تنفيذ يصبح تصحيحها جزءا من تحديث الأثر. لا يتحدث أي منهما تلقائيا لمجرد وجود SDK أحدث على جهاز المطور.
راجع سياسة الدعم والأنظمة المدعومة عند الإصدار. تحقق من الإعداد قبل الحصول على الموارد، ونظف فشل البداية، وانتظر المهام المملوكة قبل التخلص من اعتمادها. يجب أن تحافظ إصلاحات الأمن والأداء على العقود العامة. لا ينشر بناء الأثر أو مراجعته شيئا، ولا يمنح بحد ذاته إذن النشر.
الأخطاء الشائعة وإصلاحها
يتغير فحص الرمز بتغير ثقافة الجهاز.
- لماذا يحدث؟
- تستخدم هوية البروتوكول مقارنة لغوية أو محيطة.
- كيف تصلحه؟
- اختر سياسة ترتيبية صريحة لرموز البروتوكول.
- كيف تتجنب تكراره؟
- اختبر حالة الأحرف وUnicode غير المتوقع.
يبقى إصدار self-contained على تصحيح تنفيذ قديم.
- لماذا يحدث؟
- افتُرض أن تصحيح المضيف يحدث المكونات المضمنة تلقائيا.
- كيف تصلحه؟
- أعد بناء الأثر وإصداره وفق سياسة التصحيح المدعومة.
- كيف تتجنب تكراره؟
- سجل مكونات التنفيذ في بيانات الإصدار.
تُكبت تحذيرات AOT أو التقليص دون تحقق.
- لماذا يحدث؟
- لم تثبت متطلبات البيانات الوصفية الديناميكية.
- كيف تصلحه؟
- صف الانعكاس المطلوب أو أعد تصميمه وافحص وضع النشر الفعلي.
- كيف تتجنب تكراره؟
- اجعل التحقق الخاص بالنشر صريحا.
اختبر فهمك
1. لماذا لا يثبت قبول اسم فعل من قائمة السماح حق كل مستدع في تنفيذه؟
اعرض الحل المشروح
تتحقق القائمة من المفردات لا حقوق المستدعي. تحتاج المصادقة والتفويض إلى حد موثوق وسياسة مستقلة، وتظل المعاملات محتاجة لفحوص النوع والحجم والمجال. أبق التوجيه محدد الأنواع ولا تحول النص المسموح إلى تعبير صدفة. ميز بالاختبار الفعل المجهول والمعروف الممنوع والفعل المسموح ذي المعاملات الصحيحة.
2. ماذا يجب تحديثه عند صدور تصحيح أمني للتنفيذ المضمن في تطبيق self-contained؟
اعرض الحل المشروح
حدث مدخلات التنفيذ وSDK المدعومة، وأعد بناء أثر التطبيق، وشغل فحوص الصحة ووضع النشر المناسبة، ثم أصدره وفق عملية الفريق المخولة. لا يستبدل تثبيت تنفيذ على المضيف الملفات المضمنة في الأثر القديم. سجل المكونات الجديدة واحفظ معلومات التراجع والتوافق التي يحتاجها التطبيق.
أهم ما تعلمته
- تكمل سلامة النوع التحقق والتفويض ولا تستبدلهما.
- استخدم عمليات موثوقة وأبعد الأسرار عن التشخيص والآثار.
- الدعم والتصحيح والتقليص ووضع النشر مدخلات إصدار صريحة.