اعتبارات الأمان انعكاس

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

  • تعداد أنواع و الأعضاء، و فحص بيانات التعريف الخاصة بها.

  • تعداد و فحص تجميعات و الوحدات النمطية.

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

تخضع للأذونات الضرورية، تعليمات برمجية يمكن استخدام الانعكاس للقيام بالأنواع التالية من الوصول:

  • الأعضاء العامة التي لا أمان-الوصول حرج.

  • وصول أعضاء nonpublic يتمكن من الوصول إلى ترجمة تعليمات برمجية، إذا لم تكن هذه الأعضاء الأمان-حرج. أمثلة لأعضاء nonpublic مثل:

    • حماية الأعضاء فئات أساسية تعليمات برمجية's الاستدعاء. (في انعكاس، th هو هو ويشار إلى الوصول لمستوى مجموعة.)

    • internalأعضاء ( Friendالأعضاء في Visual أساسى) في استدعاء تعليمات برمجية's تجميع. (في انعكاس، th هو هو ويشار إلى الوصول لمستوى تجميع.)

    • الأعضاء الخاصة الأخرى مثيلات الفئة التي تحتوي على الاتصال تعليمات برمجية.

على سبيل المثال، تعليمات برمجية التي هو تعمل في مجال تطبيق sandboxed هو محدودة للوصول تم وصفها في ترتيب هو lهوt، ما لم يمنح مجال التطبيق permهوsions إضافى.

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

بشكل اختياري، يمكن لمجال تطبيق sandboxed منح ReflectionPermissionمع ReflectionPermissionFlag.MemberAccessإشارة، كـ المذكور في القسم غير قابلة للوصول إلى الأعضاء التي هل عادة الوصول التي تعرف عنك ، لاحقاً في هذه المقالة.

الوصول إلى الأمان-حرج الأعضاء

هو عضو الأمان-حرج إذا كان لديه SecurityCriticalAttribute، إذا فينتمي إلى نوع يحتوي SecurityCriticalAttribute، أو إذا كان في أمان-حرج تجميع. يبدأ بـ .NET Framework الإصدار 4، القواعد للوصول إلى الأمان-حرج الأعضاء كالتالي:

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

  • رمز يعمل مع الجزئي الثقة يتم التعامل معه شفافة.

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

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

لمزيد من المعلومات حول طراز الأمان في .NET Framework 4، راجع تغييرات الأمان في .NET Framework 4.

انعكاس والشفافية

يبدأ بـ .NET Framework 4، اللغة الشائعة وقت التشغيل يحدد المستوى الشفافية من نوع أو عضو من عدة عوامل، بما في ذلك المستوى الثقة للتجميع والمستوى الثقة لمجال تطبيق. يوفر انعكاس IsSecurityCritical، IsSecuritySafeCritical، و IsSecurityTransparentخصائص إلى تتيح لك إلى اكتشاف المستوى الشفافية من نوع. يعرض الجدول التالي تركيبات صحيحة هذه خصائص.

مستوى الأمان

IsSecurityCritical

IsSecuritySafeCritical

IsSecurityTransparent

حرجة

true

false

false

أمان-حرج

true

true

false

شفاف

false

false

true

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

هناك خصائص مماثلة تشغيل MethodBase، FieldInfo، TypeBuilder، MethodBuilder، و DynamicMethodفئات. (للانعكاس وانعكاس الأخرى الإرسال abstractions، يتم تطبيق السمات الأمان إلى وظائف المقترنة؛ على سبيل المثال، في حالة من خصائص تطبيقها إلى accessors الخاصية.)

الوصول إلى الأعضاء التي عادة غير قابل للوصول

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

  • للسماح تعليمات برمجية استدعاء أي عضو nonpublic: يجب منح تعليمات برمجية ReflectionPermissionمع ReflectionPermissionFlag.MemberAccessيؤشر.

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

    يمنع نهج الأمان بشكل افتراضي، وهذا إذن للتعليمات البرمجية التي تنشأ من الإنترنت.يجب أن لا يتم منح هذا الإذن إلى التعليمة البرمجية التي تنشأ من الإنترنت.

  • للسماح للتعليمة البرمجية استدعاء أي عضو nonpublic، طالما أنه منح الإذن تعيين تجميع الذي يحتوي على العضو الذي تم استدعاؤه هو نفسه، أو التعيين فرعية من التعيين منح تجميع الذي يحتوي على تعليمات برمجية الاستدعاء: يجب منح تعليمات برمجية ReflectionPermissionمع ReflectionPermissionFlag.RestrictedMemberAccessيؤشر.

على سبيل المثال، افترض أن تمنح مجال تطبيق أذونات إنترنت بالإضافة إلى ReflectionPermissionمع ReflectionPermissionFlag.RestrictedMemberAccessيؤشر، وبعد ذلك تشغيل تطبيق إنترنت باستخدام تجميعات بين A و B.

  • يمكن تجميع أ استخدم انعكاس الوصول إلى الأعضاء الخاص بتجميع B، beca استخدم التعيين منح تجميع B لا يتضمن أي الأذونات التي لم يتم منحة حق أ.

  • لا يمكن تجميع A باستخدام الانعكاس للوصول الخاص الأعضاء .NET Frameworkتجميعات مثل mscorlib.dll، لأن mscorlib.dll هو موثوق بها ثقة كاملة ولذلك قام permهوsions التي تم منحها للتجميع أ. لا MemberAccessExceptionيتم طرح عندما يقود الأمان الوصول إلى تعليمات برمجية المكدس في وقت التشغيل.

إنشاء تسلسل

For إنشاء تسلسل, SecurityPermission مع the SecurityPermissionAttribute.SerializationFormatter يؤشر provides the ability إلى يحصل و التعيين الأعضاء of قابل للتسلسل أنواع, regardless of إمكانية وصول ذوي الاحتياجات الخاصة. This إذن enables تعليمات برمجية إلى اكتشاف و تغيير the private الولاية of an مثيل. (في addition إلى being granted the appropriate أذونات, the نوع must be marked كـ قابل للتسلسل في بيانات التعريف.)

معلمات of نوع MethodInfo

Avoid writing الأعضاء عامة that take MethodInfo معلمات, especially for موثوق به تعليمات برمجية. Such الأعضاء might be المزيد vulnerable إلى malicious تعليمات برمجية. For مثال, consider a public عضو في highly موثوق به تعليمات برمجية that takes a MethodInfo معلمة. Assume that the public عضو indirectly calls the Invoke أسلوب تشغيل the supplied معلمة. If the public عضو does not perform the necessary إذن checks, the يتصل إلى the Invoke أسلوب will دوماً succeed, because the الأمان النظام determines that the caller هو highly موثوق به. Even if malicious تعليمات برمجية does not have the إذن إلى directly invoke the أسلوب, it can still do so indirectly بواسطة calling the public عضو.

معلومات الإصدار

  • تبدأ مع .NET Framework الإصدار 4، لا يمكن استخدام تعليمات برمجية واضحة انعكاس الوصول إلى الأعضاء ذات الأمان الحرج.

  • The ReflectionPermissionFlag.RestrictedMemberAccess يؤشر هو introduced في the .NET Framework الإصدار 2.0 Service Pack 1. Earlier versions of the .NET Framework require the ReflectionPermissionFlag.MemberAccess يؤشر for تعليمات برمجية that uses انعكاس إلى الوصول nonpublic الأعضاء. This هو a إذن that should ‏‏مطلقاً be granted إلى partially موثوق به تعليمات برمجية.

  • يبدأ بـ the .NET Framework 2.0, using انعكاس إلى obtain معلومات حول nonpublic أنواع و الأعضاء does not require أي أذونات. في earlier versions, ReflectionPermission مع the ReflectionPermissionFlag.TypeInformation يؤشر هو مطلوب.

راجع أيضًا:

المرجع

ReflectionPermissionFlag

ReflectionPermission

SecurityPermission

المبادئ

تغييرات الأمان في .NET Framework 4

أمان رمز الوصول

حذف المشاكل المتعلقة بالأمان في انعكاس

عرض معلومات نوع

تطبيق السمات

الوصول إلى السمات مخصصة