سؤال

في هذه التعليمة البرمجية أود ReadFileSystem الطريقة المحرمة التأكيد إذن على الملفات.

كنت أتوقع هذا سوف رمي في fileIo.يؤكد(), ولكن لا.لماذا ؟

using System.Security.Permissions;
static void Main(string[] args)
{
    var fileIo = new FileIOPermission(PermissionState.Unrestricted);
    var secuPerm = new SecurityPermission(SecurityPermissionFlag.Assertion);
    PermissionSet set = new PermissionSet(PermissionState.Unrestricted);
    set.AddPermission(fileIo);
    set.AddPermission(secuPerm);
    set.Deny();
    ReadFileSystem();
    Console.Read();
}

private static void ReadFileSystem()
{
    var fileIo = newFileIOPermission(PermissionState.Unrestricted);
    fileIo.Assert();

    DirectoryInfo dir = new DirectoryInfo("C:/");
    dir.GetDirectories();
}

التحديث

عظيم الرابط هنا على CAS : http://blogs.msdn.com/shawnfa/archive/2004/08/25/220458.aspx

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

المحلول

اللاحقة تؤكد ينفي آثار ينكر.

القدرة على تأكيد FileIOPermission يعتمد أساسا على ما إذا كانت الجمعية هو ثقة.لا يتأثر السابقة ينكر من FileIOPermission.اتضح أنه هو أيضا لا تتأثر السابقة ينكر التأكيد SecurityPermission. وهذا لأن SecurityPermissionFlag.التأكيد يتم فحص رابط وقت الطلب. هذه ليست موثقة بوضوح;لقد وجدت أنه هنا.

لإجبار CLR أن لا أثق بك الجمعية FileIOPermission, يمكنك استخدام ما يلي في الجزء العلوي من الملف الخاص بك بعد استخدام البيانات.عند هذا إضافة إلى الملف الخاص بك ، تأكيد لن تصبح نافذة المفعول.وهذا يؤثر على الجمعية بأكملها.لا يوجد أدق التفاصيل.

[assembly:FileIOPermission(SecurityAction.RequestRefuse, Unrestricted=true)]

نصائح أخرى

أعتقد أنك قد يسيئون فهم الغرض من تأكيد الأذونات.عند التأكيد على إذن للإقامة في CAS, هي فعالية قائلا "أنا أعرف ماذا أفعل...لا يهمني ما الأذونات هي أعمق في المكدس." هذا تقريبا أبدا ما تريد.عموما تريد أن الطلب إذن مجموعة.الذي يسبب كومة الأقدام ، التي من شأنها أن تجد ينكر على المكدس ثم يسبب الأمن استثناء.

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

سؤال جيد بالتأكيد.ركضت رمز am قليلا دهشت جدا.أنا فقط لقضاء ساعة أو 2 دراسة مستندات و أبحث لكن دون جدوى.علما بأن MSDN الشرطة بالقيام الطلب على التأكيد على إذن.

تحرير:binarycoder الجواب أشار لي في الاتجاه الصحيح.

على Asserion حقوق ببساطة غير فعالة في التوجه للجمعية.فقط إذا قمت بإضافة التالية في أعلى الملف:

[assembly: SecurityPermissionAttribute(SecurityAction.RequestRefuse, Assertion = true)] 

الدعوة إلى fileIo.يؤكد() سوف تفشل.

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

[SecurityPermissionAttribute(SecurityAction.Deny, Assertion = true)]
private static void ReadFileSystem() {}

الوثائق هل الدولة التي تؤكد() 'لديه بعض القضايا الأمنية و التوصية هي دائما في الطلب-من قبل-التأكيد على:

fileIo.Demand();
fileIo.Assert();

ولكن لا يزال لديك إلى إعادة ضبط بلدي عقلية عن تطبيق مبدأ الامتيازات الأقل.

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