حذف المشاكل المتعلقة بالأمان في انعكاس
.NET Frameworkيوفر ثلاث طرق إلى الإرسال Microsoft Office 2010 Suite المتوسطة لغة (MSIL)، كل مسائل الأمان الخاص به:
تجميعات ديناميكي
مستضاف من قبل مجهولين ديناميكي وظائف
ديناميكي وظائف المقترنة بالتجميعات موجود
بغض النظر عن الطريقة التي تقوم بتوليد تعليمات برمجية الحيوية، قم بتنفيذ التعليمات البرمجية المنشأة يتطلب الجميع الأذونات التي تتطلبها أنواع والأساليب التي تستخدم التعليمات البرمجية المنشأة.
ملاحظة |
---|
الأذونات التي يتم مطلوب لعكس في التعليمات البرمجية وباعث رمز تغيرت مع الإصدارات من succeeding .NET Framework.راجع معلومات الإصدار ، لاحقاً في هذا الموضوع. |
تجميعات ديناميكي
يتم تجميعات ديناميكي انشئت بواسطة استخدام التحميلات الزائدة AppDomain.DefineDynamicAssemblyالأسلوب. معظم التحميلات الزائدة هذا أسلوب يتم مهمل في .NET Framework الإصدار 4، نظراً للإزالة لنهج الأمان آلة بأكمله. (Seeتغييرات الأمان في .NET Framework 4.) التحميلات الزائدة المتبقية يمكن تنفيذها بواسطة أي تعليمات برمجية، بغض النظر المستوى الثقة. تقع هذه التحميلات الزائدة في الثاني المجموعات: تلك التي تحدد lهوt السمات التي تنطبق على تجميع حيوي عند ذلك هو التي تم إنشاؤها، وتلك التي لا. في حالة عدم تحديد الطراز الشفافية للتجميع بتطبيق SecurityRulesAttributeالسمة عند إنشائه، الطراز الشفافية هو الموروثة من تجميع باعث.
ملاحظة |
---|
السمات التي تقوم بيطبقها على تجميع حيوي بعدها هو تم إنشاؤه باستخدام SetCustomAttributeالأسلوب، لن تصبح نافذة المفعول حتى يتم حفظ dهوk التجميع وتحميله في ذاكرة مرة أخرى. |
يمكن الوصول إلى تعليمات برمجية في تجميع حيوي أنواع مرئي و الأعضاء في تجميعات الأخرى.
ملاحظة |
---|
لا تستخدم تجميعات ديناميكي في ReflectionPermissionFlag.MemberAccessو ReflectionPermissionFlag.RestrictedMemberAccessالإشارات التي تسمح بطرق حيوية للوصول إلى أنواع nonpublic و الأعضاء. |
عابر تجميعات ديناميكي التي تم إنشاؤها في ذاكرة وعدم حفظ إلى قرص، حيث أنها تتطلب ليس لديك أذونات وصول إلى الملف. حفظ ديناميكي يتطلب تجميع إلى القرص FileIOPermissionمع الإشارات المناسب.
إنشاء تجميعات ديناميكي من تعليمات برمجية موثوق به جزئيا
خذ بعين الاعتبار الشروط التي يمكن توليد تجميع بأذونات إنترنت تجميع حيوي عابرة و تنفيذ تعليمات برمجية الخاصة به:
تجميع حيوي يستخدم فقط للأنواع العامة و الأعضاء من تجميعات الأخرى.
demanded الأذونات بتلك أنواع ويتم تضمين الأعضاء في التعيين منح تجميع موثوق بها جزئيا.
تجميع هو تم الحفظ dهوk.
يصحح لا يتم إنشاء الرموز. (InternetوLocalIntranetلا تضمين مجموعات الأذونات في الأذونات الضرورية.)
وظائف ديناميكي مستضافة من قبل مجهولين
مجهول استضافة الحيوية وظائف تم إنشاؤها باستخدام جهازي DynamicMethodالمنشئات التي لم يتم تحديد نوع المقترن بريد أو وحدة نمطية، DynamicMethod(String, Type, array<Type[])و DynamicMethod(String, Type, array<Type[], Boolean). ضع هذه المنشئات الديناميكي وظائف في تجميع معتمد من قبل النظام وموثوق به ثقة كاملة وأمان شفاف. لا توجد أذونات مطلوب لاستخدام هذه المنشئات أو للإرسال في التعليمة البرمجية للأساليب الديناميكية.
بدلاً من ذلك، عند أسلوب حيوي مستضافة من قبل مجهولين هو تاريخ الإنشاء مكدس الاستدعاءات هو التي تم التقاطها. عند أسلوب هو بناء، يتم إجراء طلبات الأمان مقابل الاستدعاءات التي تم التقاطها.
ملاحظة |
---|
المفهوم، يتم إجراء طلبات أثناء إنشاء الأسلوب.أن هو، يمكن إجراء متطلبات إرشادات MSIL كل هو صدور.في التطبيق الحالي، الجميع طلبات إجراء عند DynamicMethod.CreateDelegateأسلوب هو تسمى أو عند المحول البرمجي في نفس الوقت (JIT) هو استدعاء، إذا كان الأسلوب هو استدعاء دون الاتصال CreateDelegate. |
إذا سمح مجال تطبيق عليه، يمكن للوظائف الديناميكية مستضافة من قبل مجهولين تخطي JIT بفحص رؤية، الموضوع إلى القيود التالية: أنواع nonpublic والوصول إليها بواسطة أسلوب حيوي مستضافة من قبل مجهولين الأعضاء يجب في تجميعات التي منح مجموعات متساوية إلى، أو مجموعات فرعية التعيين منح مكدس الاستدعاءات الإرسال. يتحقق هذا تقييد إمكانية تخطي رؤية JIT ممكناً في حالة منح مجال تطبيق ReflectionPermissionمع ReflectionPermissionFlag.RestrictedMemberAccessيؤشر.
في حالة استخدام أسلوب الخاص بك فقط للأنواع العامة وأعضاء، تكون ليس لديك أذونات مطلوبة أثناء الإنشاء.
إذا قمت بتحديد تلك رؤية JIT يجب أن يتم تخطي التحقق، dem و هو إجراء عندما يتم إنشاء الأسلوب يشمل ReflectionPermissionمع ReflectionPermissionFlag.RestrictedMemberAccessإشارة و مجموعة منح تجميع الذي يحتوي على عضو nonpublic هي التي يتم الوصول إليها.
سبب منح الإذن تعيين العضو nonpublic هو أخذها في الاعتبار، تعليمات برمجية موثوق بها جزئيا الذي تم منحك ReflectionPermissionFlag.RestrictedMemberAccessلا يمكن رفع مستوى الامتيازات الخاصة به بتنفيذ nonpublic الأعضاء تجميعات موثوق به.
كما مع أي غير ذلك emitted، تنفيذ تعليمات برمجية أسلوب ديناميكي يتطلب هي demanded أي أذونات بالأساليب التي تستخدم أسلوب حيوي.
تجميع النظام الذي يستضيف الطرق ديناميكي التي تتم استضافتها بشكل مجهول يستخدم SecurityRuleSet.Level1الشفافية الطراز، الذي هو الطراز الشفافية التي تم استخدامها في.NET Framework قبل .NET Framework 4.
لمزيد من المعلومات، راجع فئة DynamicMethod.
إنشاء شكل مجهول استضافته وظائف ديناميكية من تعليمات برمجية موثوق به جزئيا
خذ بعين الاعتبار الشروط التي يمكن توليد تجميع بأذونات إنترنت أسلوب حيوي مستضافة من قبل مجهولين و تنفيذها:
يستخدم أسلوب حيوي للأنواع العامة فقط و الأعضاء. إذا تضمن التعيين منح بها ReflectionPermissionFlag.RestrictedMemberAccess، فإنه يمكن استخدام أنواع nonpublic و الأعضاء أي تجميع التعيين منح الإذن الخاص به هو يساوي أو التعيين فرعية من التعيين منح التجميع باعث.
الأذونات التي يتم مطلوب قبل الجميع أنواع واستخدامها بطريقة حيوية الأعضاء الموجودة في التعيين منح تجميع موثوق بها جزئيا.
ملاحظة |
---|
ديناميكي لا تعتمد وظائف رموز التصحيح. |
وظائف ديناميكية المقترن مع تجميعات موجود
إلى إقران طريقة حيوية بنوع أو وحدة نمطية في تجميع موجودة، استخدم أي من DynamicMethodconstrucإلىrs التي تحدد نوع المقترن أو وحدة نمطية?. تتنوع الأذونات المطلوبة للاتصال بهذه المنشئات، لأن اقتران أسلوب حيوي بنوع موجود أو الوحدة النمطية وصولاً طريقة ديناميكية لأنواع nonpublic و الأعضاء:
أسلوب حيوية التي هو المقترن بنوع الوصول إلى الجميع الأعضاء من هذا النوع، حتى الأعضاء الخاصة، وعلى الجميع أنواع الداخلية وأعضاء في تجميع الذي يحتوي على نوع المقترن.
أسلوب حيوي المقترنة بوحدة نمطية لديه حق الوصول إلى الجميع internalأنواع و الأعضاء ( Friendفي Visual أساسى، assemblyفي بيانات التعريف لوقت تشغيل اللغة العامة) في وحدة نمطية.
بالإضافة إلى ذلك، يمكنك استخدم على الدالة الإنشائية تحدد إمكانية تخطي رؤية بالتحقق من المحول البرمجي JIT. القيام بطريقة حيوية حق الوصول إلى الجميع أنواع يعطيك ذلك و الأعضاء في الجميع تجميعات، بغض النظر عن المستوى الوصول.
demanded الأذونات الدالة الإنشائية تعتمد تشغيل قدر الوصول تقرر إعطاء طريقة حيوية:
إذا استخدمت الأسلوب العام فقط أنواع وأعضاء، وإقرانها بنوع خاص بك أو وحدة نمطية? الخاصة بك، وليس لديك أذونات مطلوبة.
إذا قمت بتحديد كيفية ظهور JIT بفحص يجب أن يتم تخطي، الدالة الإنشائية إلزامية ReflectionPermissionمع ReflectionPermissionFlag.MemberAccessيؤشر.
حتى إذا قمت بإقران طريقة ديناميكية باستخدام نوع آخر، في نوع آخر في تجميع الخاص بك، الدالة الإنشائية إلزامية ReflectionPermissionمع ReflectionPermissionFlag.MemberAccessيؤشر و SecurityPermissionمع SecurityPermissionFlag.ControlEvidenceيؤشر.
إذا قمت بإقران الديناميكي أسلوب مع نوع أو وحدة نمطية في تجميع آخر، المنشئ إلزامية أمرين: ReflectionPermissionمعReflectionPermissionFlag.RestrictedMemberAccessيؤشر، و مجموعة منح تجميع الذي يحتوي على آخر وحدة نمطية. أن هو، استدعاء المكدس يجب أن تضمين الجميع permهوsions في التعيين منح وحدة نمطية? للهدف، بالإضافة إلى ReflectionPermissionFlag.RestrictedMemberAccess.
ملاحظة للتوافق مع الإصدارات السابقة، في حالة تعيين الطلب لمنح الإذن للهدف بالإضافة إلى ReflectionPermissionFlag.RestrictedMemberAccessفشل، ومتطلبات الدالة الإنشائية SecurityPermissionمع SecurityPermissionFlag.ControlEvidenceيؤشر.
وعلى الرغم من أنه يتم وصف عناصر الموجودة في هذه القائمة من التعيين منح تجميع باعث، تذكر أن متطلبات إجراء المقابلة مع مكدس الاستدعاءات الكامل، بما في ذلك حدود مجال تطبيق.
لمزيد من المعلومات، راجع فئة DynamicMethod.
إنشاء وظائف ديناميكية من تعليمات برمجية موثوق به جزئيا
ملاحظة |
---|
الطريقة الموصى بها لإنشاء وظائف حيوية من تعليمات برمجية موثوق بها جزئيا هو لاستخدامه كمجهول استضافة الوظائف الديناميكية . |
خذ بعين الاعتبار الشروط التي يمكن توليد تجميع بأذونات إنترنت أسلوب حيوي و تنفيذها:
كلا الأسلوبين الحيوية هو المقترنة بوحدة نمطية أو النوع الذي emits عليه، أو يتضمن التعيين منح بها ReflectionPermissionFlag.RestrictedMemberAccessو هو المقترنة بوحدة نمطية في تجميع منح الإذن له بتعيين هو يساوي أو التعيين فرعية من التعيين منح التجميع باعث.
يستخدم أسلوب حيوي للأنواع العامة فقط و الأعضاء. إذا تضمن التعيين منح بها ReflectionPermissionFlag.RestrictedMemberAccessوهي مقترنة بوحدة نمطية في تجميع منح الإذن الخاص به هو التعيين يساوي أو التعيين فرعية من التعيين منح التجميع الإرسال، فإنه يمكن استخدام أنواع ووضع علامة على الأعضاء internal(Friendin Visual أساسى,assemblyin وقت تشغيل اللغة العامة بيانات التعريف) في وحدة نمطية? المقترنة.
demanded الأذونات بكافة الأنواع واستخدامها من قبل الأعضاء ديناميكي أسلوب المضمنة في التعيين منح تجميع موثوق بها جزئيا.
لا أسلوب حيوي بتخطي اختبارات رؤية JIT.
ملاحظة |
---|
ديناميكي لا تعتمد وظائف رموز التصحيح. |
معلومات الإصدار
بدءاً من .NET Framework 4، آلة مستوى نهج الأمان هو حلها وتصبح الشفافية الأمان فرض الافتراضي mechanهوm. انظر تغييرات الأمان في .NET Framework 4
بدءاً .NET Framework الإصدار 2.0 Service Pack 1، ReflectionPermissionمع ReflectionPermissionFlag.ReflectionEmitيؤشر هو لم تعد مطلوبة عند باعث تجميعات ديناميكي والأساليب الديناميكية. Th هو يؤشر هو مطلوبة في الجميع الإصدارات السابقة من .NET Framework.
ملاحظة |
---|
ReflectionPermission with the ReflectionPermissionFlag.ReflectionEmit flag is included by default in the FullTrust and LocalIntranet named permission sets, but not in the Internet permission set.ولذلك، في الإصدارات السابقة من .NET Framework، يمكن استخدامها في مكتبة مع أذونات إنترنت فقط في حالة أن ينفذ Assertل ReflectionEmit.مثل مكتبات تتطلب مراجعة حذراً الأمان لأنها قد تتسبب أخطاء codفيg في ثقوب الأمان. .NET Framework 2.0 SP1يسمح تعليمات برمجية أن تصدر في سيناريوهات الثقة جزئي دون هو suing أي أمان إلزامية، نظراً لإنشاء تعليمات برمجية هو ليس مثل المميز تشغيل.التي هو، تعليمات برمجية المنشأة على لا permهوsions المزيد تجميع الذي emits عليه.يسمح هذا لمكتبات الإرسال برمز أن أمان شفاف و إزالة الحاجة إلى تأكيد ReflectionEmit، تبسيط مهمة الكتابة مكتبة آمنة. |
بالإضافة إلى ذلك، .NET Framework 2.0 SP1يقدم ReflectionPermissionFlag.RestrictedMemberAccessإشارة للوصول إلى أنواع nonpublic و الأعضاء من موثوق به جزئيا الأساليب الديناميكية. الإصدارات السابقة من .NET Frameworkتتطلب ReflectionPermissionFlag.MemberAccessعلامة للوظائف الديناميكية التي يمكنها الوصول إلى أنواع nonpublic و الأعضاء؛ هذا هو إذن يجب أن لا يتم منح إلى تعليمات برمجية موثوق بها جزئيا.
وأخيراً، .NET Framework 2.0 SP1يقدم وظائف المضيفة بطريقة مجهولة.
الحصول تشغيل معلومات تشغيل أنواع و الأعضاء
بدءاً من .NET Framework 2.0، ليس لديك أذونات مطلوبة إلى الحصول على معلومات حول أنواع nonpublic وأعضاء. انعكاس هو يستخدم للحصول على المعلومات اللازمة للإرسال بأساليب ديناميكية. على سبيل المثال، MethodInfoتستخدم كائنات إلى الإرسال بأسلوب استدعاءات. الإصدارات السابقة من .NET Frameworkتتطلب ReflectionPermissionمع ReflectionPermissionFlag.TypeInformationيؤشر. لمزيد من المعلومات، راجع اعتبارات الأمان انعكاس.