CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 523

523

Chương 13: Bảo mật

Tạo và cấu hình quyền mà bạn muốn kiểm tra rồi truyền nó cho phương thức
tĩnh

IsGranted

của lớp

System.Security.SecurityManager

.

Sử dụng yêu cầu quyền tối thiểu, bạn có thể bao đam răng bộ thực thi cấp cho assembly tập
các quyền đã được chỉ định; nếu mã lệnh của bạn đang chạy, bạn có thể chắc rằng nó có các
quyền tối thiểu đã được yêu cầu. Tuy nhiên, bạn có thể muốn hiện thực một chức năng có tính
“cơ hội” sao cho ứng dụng có thể cung cấp chức năng đó chỉ khi bộ thực thi cấp cho assembly
của bạn các quyền phu hợp. Cách tiếp cận này được chính thức hóa một phần bằng các yêu
cầu quyền tùy chọn, cho phép bạn định nghĩa một tập các quyền mà mã lệnh của bạn có thể
tân dụng nếu chính sách bảo mật cấp chúng, nhưng lại không thiết yếu đôi với sư vân hành
thành công cua ma lênh (mục 13.5 đã trình bày chi tiết về các yêu cầu quyền tùy chọn).
Vấn đề đối với các yêu cầu quyền tùy chọn là bộ thực thi không có khả năng báo cho
assembly rằng nó đã cấp những quyền nào. Bạn có thể sử dụng một thao tác được-bảo-vệ và
thất bại một cách êm xuôi khi lời gọi

này

dẫn đến ngoại lệ

System.Security.SecurityException

. Tuy nhiên, sẽ hiệu quả hơn khi xác định xem bạn có

các quyền cần thiết hay không. Sau đó, bạn có thể xây dưng logic vào trong mã lệnh để tránh
gọi phai các thành viên được-bảo-vệ mà sẽ gây ra stack walk và dựng nên các ngoại lệ bảo
mật. Đoạn mã dưới đây trình bày cách sử dụng phương thức

IsGranted

để xác định xem

assembly hiện tại có quyền ghi vào thư mục C:\Data hay không. Bạn có thể tạo một lời gọi
như thế mỗi khi bạn cần kiểm tra quyền, nhưng sẽ hiệu quả hơn nếu sử dụng môt giá trị luận
lý để thiết lập một cờ cấu hình cho biết có cho phép người dùng lưu file hay không.

// Định nghĩa một biến luận lý cho biết assembly có quyền

// truy xuất ghi đối với thư mục C:\Data hay không.

bool canWrite = false;

// Tạo và cấu hình một đối tượng FileIOPermission mô tả quyền

// truy xuất ghi đối với thư mục C:\Data.

System.Security.Permissions.FileIOPermission fileIOPerm =

new System.Security.Permissions.FileIOPermission(

System.Security.Permissions.FileIOPermissionAccess.Write,

@"C:\Data");

// Kiểm tra assembly hiện tại có quyền đã được chỉ định hay không.

canWrite = System.Security.SecurityManager.IsGranted(fileIOPerm);

8.

8.

H n ch ai đó th a k các l p c a b n

ế

ừ ế

ớ ủ ạ

H n ch ai đó th a k các l p c a b n

ế

ừ ế

ớ ủ ạ

và chép đè các thành viên l p

và chép đè các thành viên l p

Bạn cần kiểm soát những ai có thể thừa kế các lớp của bạn thông qua sự thừa kế
(inheritance
) và một lớp dẫn xuất có thể chép đè những thành viên nào.

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.