التعليمات البرمجية الشفافة أمنياً، المستوى 1
تساعد الشفافية المطورين على كتابة مكتبات .NET Framework أكثر أماناً و تكشف الوظائف لتعليمات برمجية موثوق بها جزئياً. تم تقديم الشفافية من المستوى 1 في .NET Framework الإصدار 2.0 و تم استخدامها بشكل أساسي فقط داخل Microsoft. بدءاً من .NET Framework الإصدار 4، يمكنك استخدام الشفافية من المستوى 2. ومع ذلك، قد تم الاحتفاظ بالشفافية من المستوى 1 بحيث يمكنك التعرف على التعليمات البرمجية القديمة التي يجب أن يتم تشغيلها بقواعد الأمان السابقة.
هام |
---|
يجب عليك تحديد المستوى 1 للشفافية للتوافق فقط; بمعني، قم بتحديد المستوى 1 للتعليمات البرمجية الخاصة بك التي تم تطويرها باستخدام .NET Framework 3.5 أو أي إصدار سابق يستخدم AllowPartiallyTrustedCallersAttribute أو لا يستخدم نموذج الشفافية.على سبيل المثال، استخدم مستوى الشفافية 1 لتجميعات .NET Framework 2.0 التي تسمح بطلبات الاستدعاء من طالبي استدعاء موثوق بهم بشكل جزئي (APTCA).للتعليمات البرمجية التي تم تطويرها من أجل .NET Framework 4، استخدم دوماً المستوى 2 للشفافية. |
يشمل هذا الموضوع على الأقسام التالية.
نموذج المستوى 1 للشفافية
سمات الشفافية
أمثلة الشفافية الأمنية
نموذج المستوى 1 للشفافية
عند استخدام المستوى 1 للشفافية استخدام نموذج أمني يفصل التعليمات البرمجية إلى أساليب شفافة أمنياُ،و حرجة من ناحية السلامة الامنية، وحرجة أمنياُ.
يمكنك وضع علامة على تجميع بأكمله، أو على بعض الفئات في تجميع ما، أو على بعض الأساليب في فئة ما على أنها شفافة أمنياً. لا يمكن للتعليمات البرمجية رفع الامتيازات. يؤدي هذا التقييد إلى ثلاث نتائج:
لا يمكن للتعليمات البرمجية الشفافة أمنياً تنفيذ إجراءات Assert.
أي طلب ارتباطي يتم الوفاء به من قبل تعليمات برمجية شفافة أمنياً يصبح طلب كامل.
أي تعليمات برمجية غير آمنة (لا يمكن التحقق منها) يجب تنفيذها في تعليمات برمجية شفافة أمنياً تسبب طلب كامل للإذن الأمني UnmanagedCode.
يتم فرض هذه القواعد أثناء التنفيذ بواسطة بيئة وقت تشغيل اللغة العامة (CLR). تقوم التعليمات البرمجية الشفافة أمنياً بتمرير كافة متطلبات الأمان للتعليمات البرمجية إلى طالبي استدعائها. المُطالبات التي يتم تمريرها عبر التعليمات البرمجية الشفافة أمنياً لا يمكنها رفع الامتيازات. إذا قام تطبيق ذو ثقة منخفضة بطلب استدعاء تعليمات برمجية شفافة أمنياُ و أدى ذلك إلى طلب لامتياز عالي، سيعود الطلب مرة أخرى للتعليمات البرمجية ذات الثقة المنخفضة و يفشل. لا يمكن للتعليمات البرمجية الشفافة أمنياً إيقاف الطلب لأنه لا يمكنها القيام بإجراءات التأكيد (assert). و تؤدي نفس التعليمات البرمجية الشفافة أمنياً و التي يتم طلب استدعائها من تعليمات برمجية ذات ثقة كاملة إلى طلب ناجح.
الحرج أمنياً هو عكس الشفاف أمنياً. يتم تنفيذ التعليمات البرمجية الحرجة أمنياً في وضع الثقة الكاملة و يمكنها إجراء كافة العمليات التي تتطلب امتياز. التعليمات البرمجية الحرجة من ناحية السلامة الأمنية هي تعليمات برمجية ذات امتيازات و قد مرّت من خلال عمليات تدقيق أمني شاملة للتأكد من أنها لا تسمح لطالبي الاستدعاء الموثوق بهم جزئيًا من استخدام موارد ليس لديهم إذن للوصول لها.
يجب عليك تطبيق الشفافية بشكل صريح. يمكن وضع علامة على معظم التعليمات البرمجية الخاصة بك التي تتعامل مع منطق ومعالجة البيانات بشكل عام على أنها شفافة أمنياً، بينما يتم وضع علامة على المقدار الأقل من التعليمات البرمجية و التي تقوم برفع الامتيازات على أنها حرجة من ناحية السلامة الأمنية.
هام |
---|
يقتصر المستوى 1 للشفافية على نطاق التجميع; لا يتم فرضه بين التجميعات.تم استخدام المستوى 1 للشفافية بشكل أساسي ضمن Microsoft لأغراض التدقيق الأمني.يمكن الوصول للأنواع والأعضاء الحرجة أمنياً داخل تجميع من المستوى 1 من قِبل تعليمات برمجية شفافة أمنياً في تجميعات أخرى.ومن الضروري أن تقوم بتنفيذ مُطالبات ارتباطية للحصول على الثقة الكاملة في كافة الأنواع و الأعضاء الخاصة بك في المستوى 1.الأنواع والأعضاء الحرجة من ناحية السلامة الأمنية يجب عليها أيضاً التأكد من أن لدى طالبي الاستدعاء الأذونات للموارد المحمية التي يتم الوصول إليها بواسطة النوع أو العضو. |
ومن أجل التوافق مع الإصدارات السابقة من .NET Framework، كافة الأعضاء التي لم يتم عمل تعليق توضيحي لها مع سمات الشفافية التي تُعتبر حرجة من ناحية السلامة الأمنية. كافة الأنواع التي لم يتم عمل تعليق توضيحي لها تعتبر شفافة أمنياً. لا توجد أية قواعد تحليل ثابتة للتحقق من صحة الشفافية. ولذلك، فقد تحتاج إلى تصحيح أخطاء الشفافية في وقت التشغيل.
سمات الشفافية
يصف الجدول التالي الثلاث سمات التي تستخدمها لإضافة تعليقات توضيحية للتعليمات البرمجية فيما يتعلق بالشفافية.
السمة |
الوصف |
---|---|
يسمح بذلك فقط في مستوى التجميع. يحدد كافة الأنواع والأعضاء في التجميع على أنها شفافة أمنية. لا يمكن أن يحتوي التجميع على أية تعليمات برمجية حرجة أمنياً. |
|
عند الاستخدام على مستوى التجميع دون خاصية Scope،يؤدي إلى تعريف كافة التعليمات البرمجية في التجميع على أنها شفافة أمنياً بشكل افتراضي، ولكن مع الإشارة إلى أن التجميع قد يحتوي على تعليمات برمجية حرجة أمنياً. عند الاستخدام على مستوى الفئة، يؤدي إلى تعريف الفئة أو الأسلوب على أنه حرج أمنياً، ولكن ليس أعضاء الفئة. لجعل كافة الأعضاء حرجين أمنياُ ، قم بضبط الخاصية Scopeعلى Everything. عند استخدامها على مستوى العضو تنطبق السمة فقط على ذلك العضو. الفئة أو العضو المعرّف على أنه حرج أمنياً يمكنه القيام برفع الامتياز.
هام
في المستوى 1 للشفافية، يتم التعامل مع الأنواع و الأعضاء الحرجة أمنياً على أنها حرجة من ناحية السلامة الامنية عند طلب الاستدعاء من خارج التجميع.يتعين عليك حماية الأنواع والأعضاء الحرجة أمنياً بطلب ارتباطي للثقة الكاملة لتجنب عملية رفع الامتياز غير المصرح بها.
|
|
تعرّف التعليمات البرمجية الحرجة أمنياً التي يمكن الوصول إليها من قبل تعليمات برمجية شفافة أمنياً في التجميع. بخلاف ذلك، لا يمكن للتعليمات البرمجية الشفافة أمنياً الوصول إلى الأعضاء الخاصة أو الداخلية الحرجة أمنياً في نفس التجميع. سيؤثر القيام بذلك على التعليمات البرمجية الحرجة أمنياً ويجعل إجراء رفع الامتياز غير المتوقّع ممكناً. يجب على التعليمات البرمجية الحرجة من ناحية السلامة الأمنية أن تخضع لتدقيق أمني صارم.
ملاحظة
يجب على الأنواع والأعضاء الحرجة من ناحية السلامة الأمنية القيام بالتحقق من صحة الأذونات لطالبي الاستدعاء لتحديد ما إذا كان لدى طالب الاستدعاء حق الوصول إلى الموارد المحمية.
|
السمة SecuritySafeCriticalAttribute تمكّن التعليمات البرمجية الشفافة أمنياً من الوصول إلى الأعضاء الحرجة أمنياً في نفس التجميع. خذ بعين الاعتبار التعليمات البرمجية الشفافة أمنياُ والتعليمات البرمجية الحرجة أمنياُ في التجميع الخاص بك كأنهم منفصلين إلى تجميعين. لن تتمكن التعليمات البرمجية الشفافة أمنياُ من مشاهدة الأعضاء الداخلية أو الخاصة للتعليمات البرمجية الحرجة أمنياً. بالإضافة إلى ذلك، يتم عمل تدقيق للتعليمات البرمجية الحرجة أمنياً على الوصول للواجهة العامة لها. لن تتوقع أنه يمكن الوصول لحالة خاصة أو داخلية من خارج التجميع; وسترغب في الاحتفاظ بالحالة في شكل معزول. إن السمة SecuritySafeCriticalAttribute تحافظ على بعزل الحالة بين التعليمات البرمجية الشفافة أمنياُ و الحرجة أمنياً مع توفير القدرة على تجاوز العزل عند الضرورة. يتعذر على التعليمات البرمجية الشفافة أمنياُ الوصول إلى التعليمات البرمجية الحرجة أمنياً الخاصة أو الداخلية إلا إذا تم وضع علامة علي تلك الأعضاء بالعلامة SecuritySafeCriticalAttribute. قبل تطبيق SecuritySafeCriticalAttribute ، قم بعمل تدقيق على هذا العضو كما لو كان مكشوفاً بشكل عام.
التعليق التوضيحي على مستوى التجميع
يصف الجدول التالي تأثيرات استخدام سمات الأمان في مستوى التجميع.
سمة التجميع |
حالة التجميع |
---|---|
عدم وجود سمة على تجميع موثوق به جزئيًا |
كافة الأنواع و الأعضاء شفافة. |
لم يتم تحديد سمة على تجميع موثوق به ثقة كاملة (في مخزن التجميع العمومي المؤقت أو تم تعريفة على أن له الثقة الكاملة في AppDomain) |
كافة الأنواع شفافة و كافة الأعضاء حرجة من ناحية السلامة الأمنية. |
SecurityTransparent |
كافة الأنواع و الأعضاء شفافة. |
SecurityCritical(SecurityCriticalScope.Everything) |
كافة الأنواع والأعضاء حرجة أمنياً. |
SecurityCritical |
يتم عادةً تعيين كافة التعليمات البرمجية افتراضيًا على أنها شفافة. ومع ذلك، فإنه يمكن أن يكون للأنواع و الأعضاء الفردية سمات أخرى. |
أمثلة الشفافية الأمنية
لإستخدام قواعد .NET Framework 2.0 (شفافية من المستوى 1)، استخدم التعليق التوضيحي التالي للتجميع:
[assembly: SecurityRules(SecurityRuleSet.Level1)]
إذا كنت ترغب في تحديد تجميع كامل ليكون شفافاً و ذلك لإشارة إلى أن التجميع لا يحتوي على أية تعليمات برمجية حرجة و لا يرفع مستوى الامتيازات بأي طريقة، فيمكنك بشكل صريح إضافة الشفافية إلى التجميع بالسمة التالية:
[assembly: SecurityTransparent]
إذا كنت تريد الجمع بين التعليمات البرمجية الشفافة و الحرجة في نفس التجميع، ابدأ بوضع السمة SecurityCriticalAttribute على التجميع لتشير إلى أن التجميع يمكن أن يحتوي على تعليمات برمجية حرجة، كما يلي:
[assembly: SecurityCritical]
إذا كنت ترغب في تنفيذ إجراءات حرجة أمنياُ، يجب وضع السمة SecurityCriticalAttribute بشكل صريح مرة أخرى على التعليمات البرمجية التي ستنفّذ الإجراء الحرج، كما هو موضح في مثال التعليمات البرمجية التالي:
[assembly: SecurityCritical]
Public class A
{
[SecurityCritical]
private void Critical()
{
// critical
}
public int SomeProperty
{
get {/* transparent */ }
set {/* transparent */ }
}
}
public class B
{
internal string SomeOtherProperty
{
get { /* transparent */ }
set { /* transparent */ }
}
}
التعليمات البرمجية السابقة شفافة باستثناء الأسلوب Critical، والذي تم بشكل صريح وضع علامة علية بأنه حرج أمنياً. الشفافية هي الإعداد الافتراضي، حتى مع السمة SecurityCriticalAttribute على مستوى التجميع.