.NET: هل يجب أن يكون اسم التنفيذيين موقعة ذات اسم قوي؟ ماذا عن DLLs الخاصة؟

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

  •  20-09-2019
  •  | 
  •  

سؤال

يتكون طلبي من ثلاث مجموعات: exe واحد يشير إلى اثنين من DLLs. DLLs خاصة في طلبي - يتم استخدامها فقط من خلال هذا القابل للتنفيذ.

هل يجب إعطاء هذه التجميعات اسمًا قويًا؟

يقترح FXCOP أنه ينبغي عليهم - لجميع التجميعات التي تنتجها حاليًا:

CA2210: علامةu003Cassembly> مع مفتاح اسم قوي.

لكن، هذه النصيحة يقول:

بشكل عام ، يجب عليك تجنب تجميعات exe exe application ذات تسمية قوية.

و

قد ترغب في تجنب مكونات تسمية قوية خاصة بتطبيقك.

هل يجب أن أعطي هذه التجميعات اسمًا قويًا؟ ما هي فوائد القيام بذلك (أو عدم القيام بذلك) في هذه الحالة؟

يحرر:

بالنظر إلى العديد من التطبيقات بهيكل مماثل ، يبدو أنه لا يوجد إجماع على هذه المسألة. الثنائيات paint.net و crack.net ليسوا اسمًا قويًا ، في حين .NET Reflector و تجسس نكون.

ومن المثير للاهتمام ، مع اتباع Microsoft Suite Microsoft النهج الأخير: في مزيج التعبير ، على سبيل المثال ، اختاروا تسجيل علامة قوية على حد سواء blend.exe و dlls المصاحبة (مثل microsoft.expression.blend.dll).

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

هل هناك أي فوائد لثنائيات التوقيع القوية في هذا الموقف؟ أو ، هل هناك أي فوائد لعدم القيام بذلك؟

تحرير 2:

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

"تسمية قوية يمكن أن تجعل من الصعب إدارة التبعيات وإضافة النفقات العامة غير الضرورية للمكونات الخاصة."

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

المحلول

كما أراها ، هذه هي الفوائد لتوقيع اسم قوي في هذا الموقف:

  • يمنع مهاجم استبدال DLL بموقع واحد باستخدام مفتاح آخر (أو لم يتم توقيعه على الإطلاق) ، دون استبدال exe أيضًا (نظرًا لأن EXE يحتوي على مرجع يتضمن المفتاح العام).
  • يمنع مهاجم تعديل التجميع مع الاحتفاظ بالمفتاح الحالي (لأن هذا سيؤدي إلى فشل التحقق من التوقيع). لاحظ ، مع ذلك ، أن التحقق من التوقيع في هذا الموقف .NET 3.5 معطل بشكل افتراضي.
  • يمكن أن يمنع التطبيق من التشغيل باستخدام إصدارات غير متطابقة من التجميعات - إذا تم استبدال DLL بشكل غير صحيح بسبب خطأ النشر ، فسوف يفشل التطبيق في تحميله بدلاً من محاولة استخدام إصدار خاطئ (يحتمل أن يكون غير متوافق).
  • يتجنب تحذيرات FXCOP.

وعيوب التوقيع (أعتقد أن هذه هي ما تشير إليه المقالة المرتبطة):

  • يتطلب استبدال DLL بإصدار جديد متوافق (من أجل إصلاح الخلل ، على سبيل المثال) استبدال EXE.
  • في إصدارات .NET <3.5 SP1 ، تستغرق التجميعات القوية المسمى وقتًا أطول للتحميل بسبب التحقق من التوقيع.
  • يستغرق تحميل DLLs القوية أيضًا وقتًا أطول لأن المحمل يقوم (غير مجدي في هذا الموقف) بحثًا عن GAC قبل البحث محليًا.

يبدو من العار أن يكون الاختيار إما تسمية قوية (وبالتالي يتطلب مراجع لمطابقة مفتاح دقيق وإصدار دقيق) ، أو لا تسميات قوية (ولا تتطلب إما المطابقة). إذا كان من الممكن أن تتطلب مفتاحًا ولكن ليس إصدارًا معينًا ، فربما يكون من الممكن الحصول على أول 2 فوائد للتوقيع دون الحصول على العيب الأول أيضًا. ربما يكون هذا ممكنًا من خلال تطبيق اسم قوي ثم التعامل مع مشكلة الإصدار باستخدام App.Config؟

نصائح أخرى

تضمن مجموعات التسمية القوية فقط توافق الإصدار. هذا ليس هو نفسه الثقة في الجمعية.

بمعنى آخر ، يشير "الاسم القوي" فقط إلى هذا التجميع الثنائي الدقيق بالاشتراك مع رقم الإصدار المستخدم في وقت الترجمة.

إذا قمت بتلك التجميعات ، فإن CLR سوف يتحقق منها مرة واحدة فقط. في ذلك الوقت التجمع هو gac'd. هذا يمكن أن يؤدي إلى تحسين الأداء. ومع ذلك ، فقد أظهرت تجربتي أنها ضئيلة.

يمكن استبدال التجمع القوي المسماة بآخر غير قوي. وهو ما يثير الجزء حول التسمية القوية وليس أي نوع من ميزة الأمان.

رأيي الشخصي هو أن مستوى الألم المرتبط بهم لا يبرر استخدامها. الألم هو كيفية المسمار مع أدوات الاختبار الآلي.

https://web.archive.org/web/1/http://articles.techrepublic٪2ECom٪2ECOM/5100-10878_11-505496.html

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

بالتأكيد ، هذه ليست حماية مطلقة. يمكن للمتسلل تعديل التجميعات وإزالة توقيعات الأسماء القوية (والمراجع) من جميع التجميعات. هذه التجميعات ستعمل أيضا.

لكن في مثل هذه الحالة ، يمكنك القول أن التعديلات لا تتم بواسطتك.

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

أعتقد أن الاستخدام الأساسي لتسمية التجميع القوي هو إدخاله في GAC.

لا أرى حاجة إلى اسم قوي.

فقط بلدي 2 بيزو ....

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