المُطالبات الارتباطية Link Demands
تؤدي المُطالبة الارتباطية إلى حدوث تدقيق أمني أثناء التحويل البرمجي في نفس الوقت و تتحقق فقط من التجميع المباشر الذي يطلب استدعاء التعليمات البرمجية الخاصة بك. يحدث الربط عند ربط التعليمات البرمجية الخاصة بك إلى مرجع النوع، بما في ذلك مراجع مؤشر الدالة و طلبات استدعاء الأسلوب. إذا لم يكن لدى التجميع الذي يطلب الاستدعاء الأذونات الكافية للارتباط بالتعليمات البرمجية الخاصة بك، لا يسمح بعملية الارتباط و يتم طرح استثناء في وقت التشغيل عند تحميل التعليمات البرمجية وتشغيلها. يمكن إبطال عمل المُطالبات الارتباطية في الفئات التي ترث من التعليمات البرمجية الخاصة بك.
لاحظ أنه لا يتم تنفيذ عملية التجوال الكاملة بالمكدس مع هذا النوع من المُطالبات وأنه لا تزال التعليمات البرمجية الخاصة بك عرضة للهجمات الخادعة. تشغيل سبيل المثال، إذا كان أسلوب في تجميع A محمي بواسطة طلب ارتباط، المتصل مباشرة في تجميع B التي يتم تقييم استناداً أذونات من "المجموعة" ب "." ومع ذلك، الطلب الارتباط لن تقييم أسلوب في تجميع C إذا كان يقوم باستدعاء الأسلوب غير مباشر في تجميع استخدام الأسلوب في تجميع "ب". يعين الطلب ارتباط توجيه الأذونات التي يجب أن يكون للمتصلين في تجميع الاتصال الفوري لربط تعليمات برمجية الخاصة بك. لا يحدد الأذونات التي يجب أن تكون لدى كافة طالبي الاستدعاء ليتم تشغيل التعليمات البرمجية الخاصة بك.
Assert، و Deny، و PermitOnly التي تعدّل عملية التجوال في المكدس لا تؤثر على تقييم المُطالبات الارتباطية. و لأن المُطالبات الارتباطية لا تقوم بتنفيذ عملية التجوال في المكدس، لا يكون لمعدِلّات التجوال بالمكدس أي تأثيرعلى المُطالبات الارتباطية.
إذا كان يتم الوصول إلى أسلوب محمي بمُطالبة ارتباطية من خلال انعكاس، ستتحقق المُطالبة الارتباطية من طالب استدعاء التعليمات البرمجية المباشر الذي يتم الوصول إليه من خلال الانعكاس. و يكون هذا صحيحاً لاكتشاف الأسلوب واستدعاء الأسلوب الذي يتم تنفيذه باستخدام الانعكاس. على سبيل المثال، افترض وجود تعليمات برمجية تستخدم الانعكاس لإرجاع كائن MethodInfoو التي تمثل أسلوب محمي بواسطة طلب ارتباطي ثم يقوم بتمرير الكائن MethodInfo إلى التعليمات البرمجية الأخرى التي تستخدم الكائن لاستدعاء الأسلوب الأصلي. في هذه الحالة تحدث عملية التحقق الخاصة بالمُطالبة الارتباطية مرتين: مرة واحدة للتعليمات البرمجية التي تقوم بإرجاع الكائن MethodInfo و مرة واحدة للتعليمات البرمجية التي تستدعيها.
ملاحظة |
---|
المُطالبة الارتباطية التي يتم تنفيذها على دالة إنشائية لفئة ثابتة لاتحمي الدالة الإنشائية لأن الدوال الإنشائية الثابتة يتم استدعاؤها بواسطة النظام، خارج مسار تنفيذ التعليمات البرمجية للتطبيق.وكنتيجة لذلك، عند تطبيق طلب ارتباطي لفئة بأكملها، فإنه يتعذر حماية الوصول إلى الدالة الإنشائية الثابتة، على الرغم من حماية باقي الفئة. |
يحدد جزء التعليمات البرمجية التالي بشكل إلزامي أن أي تعليمات برمجية ترتبط بالأسلوب ReadData يجب أن يكون لها الإذن CustomPermission. يعد هذا الإذن إذناً افتراضياً مخصصاً و لا يوجد في بيئة .NET Framework. يتم إجراء الطلب بواسطة تمرير العلامة SecurityAction.LinkDemand إلى CustomPermissionAttribute.
<CustomPermissionAttribute(SecurityAction.LinkDemand)> _
Public Shared Function ReadData() As String
' Access a custom resource.
End Function
[CustomPermissionAttribute(SecurityAction.LinkDemand)]
public static string ReadData()
{
// Access a custom resource.
}
راجع أيضًا:
المبادئ
لتوسيع بيانات التعريف باستخدام السمات