منحة FullTrust في الجمعية الموثوقة التي تدعوها جمعية الثقة الجزئية

StackOverflow https://stackoverflow.com/questions/2387564

سؤال

تخيل البيئة التالية: أ XBAP التطبيق الذي يعمل في وضع الثقة الجزئي (السلوك الافتراضي ؛ طلب الثقة الكاملة ليس خيارًا - ولكن قبل أن تسأل ، إذا تم إعطاء الثقة الكاملة لـ XBAP ، فكل شيء يعمل كما هو متوقع) يشير إلى مجموعة مثبتة محليًا ، تقع في GAC. لتحقيق ذلك ، نمكّن "AllowPartiallyTrustedCallers"خيار للتجميع المحلي ، وأيضًا تم منح الثقة الكاملة. (تخيل أن هذا نوع من نظير الاتصال المحلي)

(بالمناسبة ، نحن على دراية بالجوانب الأمنية لاستخدام سمة ALTEMPARTILYTRUSTEDCALLERS ، هذا خارج نطاق هذا المنشور ، فقط لا تهتم)

الآن ، حتى لو كانت مجموعة GAC المحلية لدينا لديها الثقة الكاملة (يمكننا التحقق من ذلك عن طريق الاتصال Assembly.GetExecutingAssembly().IsFullyTrusted في أي وقت) ، ستفشل في أي مطالب (ضمنية أو صريحة) لأنه يطلق عليه المتصل الموثوق جزئيًا (XBAP). (صححني إذا كنت أسيء فهم شيء ما). Fortunatelly ، يمكننا أن نفعل تأكيدات صريحة للحصول على أذونات داخل مجموعة GAC المحلية ، على سبيل المثال:

new System.Security.Permissions.FileIOPermission(.....).Assert();

من خلال ذلك ، يمكننا منع المشي الكامل للمتطلبات في هذه المرحلة والقيام بأي وصول للملف كما نريد. (مرة أخرى ، من فضلك تصحيح لي ...)هذا في الواقع يعمل تماما! (في هذه الحالة)

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

نهج حل هذا:

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

  • ثانياً ، جربنا ttribute التالي

[System.Security.Permissions.PermissionSet(
  System.Security.Permissions.SecurityAction.Assert, Name = "FullTrust")]

لم ينجح ذلك أيضًا.

  • ثالثًا ، فكرنا في فتح AppDomain جديد ، وجعل مجموعة GAC الموثوقة تمامًا نقطة دخول AppDomains ، وتشغيل أي شيء داخل هذا AppDomain - أي مسيرة مكدس لا يمكن أن تصل إلى المتصل الموثوق به بعد الآن - في نظريتنا). لسوء الحظ ، لم نتمكن من تحقيق ذلك ... أو فشل AppDomain الذي تم إنشاؤه حديثًا في المزيد من المطالب ، حتى لو تم إعداده للتشغيل تحت أدلة مناطق الأمان "MyComputer" أو SecurityPermission غير المقيد. أنا غير قادر على منح الثقة الكاملة بشكل صريح إلى AppDomain بأكمله.

  • رابع ، باستخدام كاسبول ليس خيارًا. (لأسباب النشر)

الآن ، نظرًا لأن هذا يجب أن يكون الكثير من المعلومات ، آمل أن تفهم ما نريد أرشئه.

للحصول على هذا إلى النقطة: كيف يمكن للتجميع الموثوق به تمامًا أن تؤكد ثقة كاملة كاملة على التجميعات التي تستدعيها ، مما يمنع جميع مسارات المشي للوصول إلى المتصل الموثوق به جزئيًا؟

شكرا كثيرا مسبقا

هل كانت مفيدة؟

المحلول

النظر في الوثائق من Microsoft فيما يتعلق بالسماح المتصلين الموثوق بهم جزئيا لجمعيات الثقة الكاملة لا أعتقد أن هذا سيكون من الممكن القيام به.

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

علاوة على ذلك ، لا أستطيع أن أتخيل أن هذه العملية شيء يجب القيام به بهذه الطريقة.

ألا يمكنك تفريغ هذه المعالجة من المتصل الموثوق جزئيًا بتمرير الاتصالات إلى شيء يعمل محليًا وموثوق به بالفعل؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top