التعليمات البرمجية الشفافة أمنياً

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

ملاحظة هامةهام

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

يصف هذا الموضوع نموذج الشفافية بتفاصيل أكثر. ويحتوي على الأقسام التالية:

  • الغرض من نموذج الشفافية

  • تعيين مستوى الشفافية

  • فرض الشفافية

الغرض من نموذج الشفافية

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

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

ملاحظة هامةهام

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

تم تقديم الشفافية في .NET Framework الإصدار 2.0 لتبسيط نموذج الأمان و لتسهيل عملية كتابة ونشر التطبيقات والمكتبات الآمنة. تستخدم التعليمات البرمجية الشفافة أيضاً في Microsoft Silverlight، لتبسيط عملية تطوير تطبيقات موثوق بها جزئيًا.

ملاحظةملاحظة

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

العودة إلى الأعلى

تعيين مستوى الشفافية

تحدد السمة على مستوى التجميع SecurityRulesAttribute بشكل واضح قواعد SecurityRuleSet التي سيتبعها التجميع. يتم تنظيم القواعد تحت نظام مستوى رقمي، حيث تعني المستويات الأعلى فرض أكثر لقواعد الأمان.

و تعد المستويات كما يلي:

  • المستوى 2 ( Level2) – .NET Framework 4 قواعد الشفافية.

  • المستوى 1 (Level1) – قواعد الشفافية الخاصة بـ .NET Framework 2.0.

الفرق الأساسي بين مستويات الشفافية هو أن المستوى 1 لا يفرض قواعد الشفافية لطلبات الاستدعاء من خارج التجميع و هي مقصودة فقط من أجل التوافق.

ملاحظة هامةهام

يجب عليك تحديد المستوى 1 للشفافية للتوافق فقط; بمعني، حدد المستوى 1 للتعليمات البرمجية الخاصة بك التي تم تطويرها باستخدام .NET Framework 3.5 أو أي إصدار سابق يستخدم السمة AllowPartiallyTrustedCallersAttribute أو لا يستخدم نموذج الشفافية.على سبيل المثال، استخدم مستوى الشفافية 1 لتجميعات .NET Framework 2.0 التي تسمح بطلبات الاستدعاء من طالبي استدعاء موثوق بهم بشكل جزئي (APTCA).للتعليمات البرمجية التي تم تطويرها من أجل .NET Framework 4، استخدم دوماً المستوى 2 للشفافية.

المستوى 2 للشفافية

تم تقديم المستوى 2 للشفافية‬ في .NET Framework الإصدار 4. يعتمد هذا النموذج على ثلاثة مبادئ و هي التعليمات البرمجية الشفافة، التعليمات البرمجية الحرجة من ناحية السلامة الأمنية، و التعليمات البرمجية الحرجة أمنياً.

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

    • إجراء عملية Assert أو رفع الامتيازات.

    • أن تحتوي على تعليمات برمجية غير آمنة أو لا يمكن التحقق منها.

    • طلب استدعاء تعليمات برمجية حرجة.

    • استدعاء تعليمة برمجية أصلية تحمل السمة SuppressUnmanagedCodeSecurityAttribute.

    • طلب استدعاء عضو محمي بواسطة LinkDemand.

    • الوراثة من الأنواع الهامة.

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

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

  • يمكن للتعليمات البرمجية الحرجة أمنياً طلب استدعاء أي تعليمات برمجية ويكون موثوقاً بها ثقة كاملة، إلا أنه لا يمكن استدعاؤها بواسطة تعليمات برمجية شفافة.

المستوى 1 للشفافية

تم تقديم نموذج الشفافية 1 في .NET Framework الإصدار 2.0 لتمكين المطورين من تقليل مقدار التعليمات البرمجية المعرضة للتدقيقات الأمنية. على الرغم من أن مستوى الشفافية 1 كان متوفراً بشكل عام في الإصدار 2.0، إلا أنه كان يستخدم فقط بشكل أساسي ضمن Microsoft لأغراض التدقيق الأمني. ومن خلال التعليق التوضيحي، يمكن للمطورين تعريف الأنواع و الأعضاء التي يمكنها القيام برفع امتيازات الأمان والإجراءات الأخرى الموثوق بها (الحرجة أمنياً) و تلك التي لا يمكنها ذلك (الشفافة أمنياً). التعليمات البرمجية التي يتم تعريفها كشفافة لا تتطلب درجة عالية من التدقيق الامني. يوضح مستوى الشفافية 1 إقتصار عملية فرض الشفافية على داخل التجميع. بمعنى آخر، أي أنواع أو أعضاء عامة يتم تعريفها على أنها حرجة أمنياُ تكون حرجة أمنياُ فقط داخل التجميع. إذا كنت ترغب في فرض الأمان لتلك الأنواع و الأعضاء عندما يتم طلب استدعاء لها من خارج التجميع، فيجب عليك استخدام المُطالبات الارتباطية للحصول على الثقة الكاملة. إذا لم تقم بذلك، يتم التعامل مع الأنواع و الأعضاء الحرجة أمنياً و المرئية بشكل عام على أنها حرجة من ناحية السلامة و يمكن استدعاؤها بواسطة تعليمات برمجية موثوق بها جزئيًا خارج التجميع.

ينتطبق على نموذج الشفافية من المستوى 1 القيود التالية:

  • الأنواع و الأعضاء الحرجة أمنياً يمكن الوصول إليها بشكل عام من تعليمات برمجية شفافة أمنياً .

  • يتم فرض التعليقات التوضيحية فقط داخل تجميع ما.

  • يجب على الأنواع و الأعضاء الحرجة أمنياً أن تستخدم المُطالبات الارتباطية لفرض الأمان على طلبات الاستدعاء من خارج التجميع.

  • لا يتم فرض قواعد الوراثة.

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

العودة إلى الأعلى

فرض الشفافية

لا يتم فرض قواعد الشفافية حتى يتم حساب الشفافية. و في هذا الوقت يتم طرح InvalidOperationException إذا تم خرق قاعدة للشفافية. يعتمد الوقت الذي يتم حساب الشفافية فيه على عوامل متعددة و لا يمكن توقعها. يتم حسابها في وقت متأخر بقدر الإمكان. في .NET Framework 4، تحدث عملية حساب الشفافية على مستوى التجميع في وقت أقرب مما يحدث في .NET Framework 2.0. و يكون الضمان الوحيد هو أن حساب الشفافية سيحدث حسب وقت الحاجة إليها. و يشبه ذلك كيف يمكن لبرنامج التحويل البرمجي في نفس الوقت (JIT) تغيير متى يتم التحويل البرمجي لأسلوب ما و بين الأخطاء التي يتم الكشف عنها في هذا الأسلوب. و يكون حساب الشفافية غير مرئي إذا لم يكن هناك أخطاء بالتعليمات البرمجية الخاصة بك.

العودة إلى الأعلى

راجع أيضًا:

المبادئ

التعليمات البرمجية الشفافة أمنياً، المستوى 1

التعليمات البرمجية الشفافة أمنياً، المستوى 2