من السهل قضاء بعض الوقت لتعلم شيء ما بين مهام التطوير الثقيلة. لقد وجدت أن هناك العديد من الأمثلة على محتوى System.Security في الجهاز، ولم أستخدم مساحة الاسم هذه من قبل، لذا استخدمتها فقط للتعرف عليها. وبما أنها ليست دراسة منهجية، فليس من السهل تنظيمها. بعد التفكير فيها، سأشرحها بالأمثلة.
1. قم بتعيين الإذن
1[FileIOPermission(SecurityAction.Demand, Write= "C:\temp.txt")]
2 تطبيق الفئة العامة: System.Windows.Forms.Form
3 {
4 //محذوف
5}
يتم تعريف FileIOPermissionAttribute في System.Security.Permissions. إنه يرث من SecurityAttribute. في هذا المثال، يلزم أن يكون لديك أذونات الكتابة على الملف C:temp.txt عند استخدام فئة التطبيق.
تتضمن وثائق .net Framework هذا ما تقوله عن متطلبات الأمان: "للتأكد من أن المتصلين الذين تم منحهم أذونات محددة هم فقط الذين يمكنهم الاتصال بالرمز الخاص بك، يمكنك إعلان أو فرض أن المتصلين بالرمز الخاص بك لديهم أذونات محددة. أو مجموعة أذونات. تتسبب المتطلبات وقت التشغيل لإجراء فحص أمني، وبالتالي فرض قيود على رمز الاتصال. أثناء فحص الأمان، يمر وقت التشغيل عبر مكدس الاستدعاءات، ويتحقق من أذونات كل متصل في المكدس، ويحدد ما إذا كان قد تم منح الأذونات المطلوبة أم لا caller.إذا تم العثور على المتصل ليس لديه الأذونات المطلوبة، فسيفشل فحص الأمان ويتم طرح SecurityException
في المثال، يتم الإعلان عن الأذونات. يمكن أن يعمل SecurityAction.Demand على فئة أو طريقة، وفي هذه الحالة يعمل على فئة. تعد الكتابة إحدى خصائص FileIOPermission، وتشمل الخصائص الأخرى شائعة الاستخدام القراءة والإلحاق والكل وما إلى ذلك.
هناك أيضًا بعض القيم في تعداد SecurityAction التي تعمل على التجميع. على سبيل المثال المثال التالي:
[assembly:SecurityPermission(SecurityAction.RequestMinimum,UnmanagedCode=true)]
SecurityAction.RequestMinimum هو الحد الأدنى من إذن تشغيل الطلب. يتطلب هذا السطر أن يسمح التجميع باستدعاء التعليمات البرمجية غير المُدارة.
بالإضافة إلى الطريقة التصريحية، يمكنك أيضًا استخدام الطريقة الإلزامية. الكود التالي:
1FileIOPermission filePerm = new FileIOPermission(FileIOPermissionAccess.AllAccess, "C:\temp.txt");
2محاولة
3 {
4 filePerm.Demand();
5
6 // رمز الوصول إلى الملف يوضع هنا
7}
8catch(SecurityExceptionexcep)
9 {
10 messageBox.Show (excep.Message)؛
11 عودة؛
12}
13
2. إدارة دور المستخدم
يتم استخدام إدارة المستخدمين وأدوارهم في العديد من البرامج. في الوقت الحاضر، عزز asp.net 2.0 هذا الجانب بشكل كبير، ويمكن للمطورين إنشاء تطبيقات جيدة جدًا دون معرفة الكثير عن التكنولوجيا. ومع ذلك، بالنسبة لتطبيقات Windows Form، لا تزال العديد من الأماكن بحاجة إلى تعيينها بواسطة المبرمجين أنفسهم.
بافتراض أننا نعرف بالفعل اسم المستخدم والأدوار التي ينتمي إليها، يمكننا تعيين مبدأ سلسلة المحادثات الحالية مثل هذا:
1GenericIdentity genIdent = new GenericIdentity(userName);
2GenericPrincipal genPrin = new GenericPrincipal(genIdent, role);
3Thread.CurrentPrincipal = genPrin;
4
ثم لدينا ثلاث طرق للتحقق من أدوار المستخدم.
الطريقة الأولى هي استخدام الأسلوب GenericPrincipal.IsInRole:
1GenericPrincipalcurrentPrin = Thread.CurrentPrincipal as GenericPrincipal;
2
3if (currentPrin != null && currentPrin.IsInRole("Manager"))
4 {
5 //محذوفة
6}
7
الطريقة الثانية هي استخدام فئة PrincipalPermission، والتي تشبه الطريقة الإلزامية في إعداد الأذونات:
1PrincipalPermission prinPerm = new PrincipalPermission(null, "Manager");
2
3محاولة
4 {
5 prinPerm.Demand();
6
7 //افعل شيئا
8}
9catch
10 {
11 //معالجة الأخطاء
12}
الطريقة الثالثة تشبه طريقة التصريح في إعداد الأذونات:
1private void DecPermButton_Click(object sender, System.EventArgs e)
2{
3 حاول
4 {
5 PerformanceManagerAction();
6 // افعل شيئًا
7}
8 صيد
9 {
10 // معالجة الأخطاء
11 }
12}
13
14[الإذن الرئيسي (SecurityAction.Demand، الدور = "المدير")]
15 باطلة بيرفورمامانجيرأكشن ()
16 {
17}
شيء آخر مهم فيما يتعلق بالأمن هو التشفير. ليس لدي وقت للكتابة اليوم، سأتحدث عنها في يوم آخر.