เป็นเรื่องง่ายที่จะใช้เวลาเรียนรู้บางอย่างระหว่างงานพัฒนาหนักๆ ฉันพบว่ามีเนื้อหา 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 เมื่อใช้คลาส App
เอกสารประกอบกรอบงาน .net กล่าวถึงข้อกำหนดด้านความปลอดภัย: "เพื่อให้แน่ใจว่าเฉพาะผู้โทรที่ได้รับสิทธิ์เฉพาะเท่านั้นที่สามารถเรียกรหัสของคุณได้ คุณสามารถประกาศหรือบังคับใช้ว่าผู้เรียกรหัสของคุณมีสิทธิ์เฉพาะ หรือชุดสิทธิ์ สาเหตุข้อกำหนด รันไทม์เพื่อทำการตรวจสอบความปลอดภัย โดยบังคับใช้ข้อจำกัดกับรหัสการโทร ในระหว่างการตรวจสอบความปลอดภัย รันไทม์จะเดินผ่าน call stack ตรวจสอบสิทธิ์ของผู้โทรแต่ละคนใน stack และกำหนดว่าสิทธิ์ที่ร้องขอนั้นได้รับสิทธิ์ต่อหรือไม่ ผู้โทร หากพบว่าผู้โทรไม่มีสิทธิ์ที่จำเป็น การตรวจสอบความปลอดภัยจะล้มเหลว และ SecurityException จะถูกส่งออกไป
ในตัวอย่าง จะมีการประกาศสิทธิ์ SecurityAction.Demand สามารถดำเนินการกับคลาสหรือเมธอดได้ ในกรณีนี้จะดำเนินการกับคลาส Write เป็นหนึ่งในคุณสมบัติของ FileIOPermission คุณสมบัติอื่นๆ ที่ใช้กันทั่วไป ได้แก่ Read, Append, All ฯลฯ
นอกจากนี้ยังมีค่าบางอย่างในการแจงนับ SecurityAction ที่ดำเนินการกับแอสเซมบลี ตัวอย่างเช่น ตัวอย่างต่อไปนี้:
[assembly:SecurityPermission(SecurityAction.RequestMinimum,UnmanagedCode=true)]
SecurityAction.RequestMinimum คือสิทธิ์ขั้นต่ำสำหรับการร้องขอที่จะรัน บรรทัดนี้ต้องการให้แอสเซมบลีอนุญาตให้เรียกใช้โค้ดที่ไม่มีการจัดการ
นอกจากวิธีการประกาศแล้ว คุณยังสามารถใช้วิธีบังคับได้อีกด้วย รหัสต่อไปนี้:
1FileIOPermission filePerm = FileIOPermission ใหม่ (FileIOPermissionAccess.AllAccess, "C:\temp.txt");
2ลอง
3{
4 ไฟล์ Perm.Demand ();
5
6 // รหัสสำหรับเข้าถึงไฟล์อยู่ที่นี่
7}
8catch (ข้อยกเว้นด้านความปลอดภัยยกเว้น)
9{
10 MessageBox.Show (ยกเว้นข้อความ);
11 กลับ;
12}
13
2. การจัดการบทบาทของผู้ใช้
การจัดการผู้ใช้และบทบาทของพวกเขาถูกใช้ในหลายโปรแกรม ปัจจุบัน asp.net 2.0 ได้ปรับปรุงด้านนี้อย่างมาก และนักพัฒนาสามารถสร้างแอปพลิเคชันที่ดีมากได้โดยไม่ต้องมีความรู้เกี่ยวกับเทคโนโลยีมากนัก อย่างไรก็ตาม สำหรับแอปพลิเคชัน Windows Form หลายแห่งยังต้องตั้งค่าโดยโปรแกรมเมอร์เอง
สมมติว่าเรารู้ชื่อผู้ใช้และบทบาทอยู่แล้ว เราสามารถตั้งค่า Principal ของเธรดปัจจุบันได้ดังนี้:
1GenericIdentity genIdent = new GenericIdentity(userName);
2GenericPrincipal genPrin = GenericPrincipal ใหม่ (genIdent, บทบาท);
3Thread.CurrentPrincipal = genPrin;
4
จากนั้น เรามีสามวิธีในการตรวจสอบบทบาทของผู้ใช้
วิธีแรกคือใช้วิธี GenericPrincipal.IsInRole:
1GenericPrincipal currentPrin = Thread.CurrentPrincipal เป็น GenericPrincipal;
2
3if (currentPrin != null && currentPrin.IsInRole("ผู้จัดการ"))
4{
5 //ละไว้
6}
7
วิธีที่สองคือการใช้คลาส PrincipalPermission ซึ่งคล้ายกับวิธีการบังคับในการตั้งค่าสิทธิ์:
1PrincipalPermission prinPerm = new PrincipalPermission(null, "Manager");
2
3ลอง
4{
5 prinPerm.ความต้องการ();
6
7 //ทำอะไรสักอย่าง
8}
9จับ
10{
11 // การจัดการข้อผิดพลาด
12}
วิธีที่สามคล้ายกับวิธีการประกาศในการตั้งค่าสิทธิ์:
1private void DecPermButton_Click(ผู้ส่งวัตถุ, System.EventArgs e)
2{
3 ลอง
4 {
5 ดำเนินการManagerAction ();
6 // ทำอะไรสักอย่าง
7}
8 จับ
9 {
10 // การจัดการข้อผิดพลาด
11 }
12}
13
14[สิทธิ์หลัก (SecurityAction.Demand, Role = "ผู้จัดการ")]
15ถือเป็นโมฆะดำเนินการManagerAction()
16{
17}
สิ่งสำคัญอีกประการหนึ่งเกี่ยวกับการรักษาความปลอดภัยคือการเข้ารหัส วันนี้ฉันไม่มีเวลาเขียน ฉันจะพูดถึงมันในวันอื่น