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

517

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

kiểm tra chúng có quyền thực thi hay không. Tuy nhiên, thay đổi này sẽ không ảnh hưởng đến
các tiến trình hiện có. Do vậy, bạn phải lưu thay đổi vào Windows Registry (bằng phương thức

SavePolicy

) để nó có tác dụng với các tiến trình mới.

4.

4.

B o đ m b th c thi c p cho assembly m t s quy n nào đó

ả ả ộ ự

ộ ố

B o đ m b th c thi c p cho assembly m t s quy n nào đó

ả ả ộ ự

ộ ố

Bạn cần bảo đảm bộ thực thi cấp cho assembly của bạn các quyền truy xuất mã
lệnh (code access permission
) mà các quyền này quyết định sự thành công trong
hoạt động của ứng dụng.

Sử dụng các yêu cầu quyền (permission request) để chỉ định các quyền truy xuất
mã lệnh mà assembly cần phải có. Bạn khai báo các yêu cầu quyền bằng các đặc
tính quyền truy xuất mã lệnh ở mức assembly.

Các yêu cầu quyền cho biết các quyền mà mã lệnh phải có thì mới có thể chạy được. Ví dụ,
nếu bạn viết một trình xem phim sao cho người dùng có thể sử dụng nó để tải và xem phim từ
một server, thật tai hại nếu chính sách bảo mật của người dùng không cho phép chương trình
này mở một kết nối mạng đến server. Chương trình của bạn sẽ nạp và chạy, nhưng khi người
dùng kết nối đến server để xem phim, chương trình sẽ crash với ngoại lệ

System.Security.SecurityException

. Giải pháp là đưa vào assembly yêu cầu quyền cần thiết

để có thể mở một kết nối mạng đến server (

System.Net.WebPermission

hay

System.Net.SocketPermission

, tùy thuộc vào kiểu kết nối bạn cần mở).

Bộ thực thi thực hiện các yêu cầu quyền với nguyên tắc: khoan nạp mã lệnh, điều này tốt hơn
là nạp mã lệnh và thất bại sau khi thực hiện một hành động mà nó không có quyền. Vì vậy,
nếu sau quá trình phân giải chính sách bảo mật, bộ thực thi xác định được grant-set của
assembly không thể đáp ứng các yêu cầu quyền của assembly, nó sẽ không nạp assembly và
ném ngoại lệ

System.Security.Policy.PolicyException

.

Để khai báo một yêu cầu quyền, bạn phải sử dụng bản sao đặc tính (attribute counterpart) của
quyền truy xuất mã lệnh bạn cần. Tất cả các quyền truy xuất mã lệnh đều có một bản sao đặc
tính mà bạn có thể sử dụng để tạo ra các lệnh bảo mật khai báo (declarative security
statement
)—bao gồm các yêu cầu quyền. Ví dụ, bản sao đặc tính của

SocketPermission

SocketPermissionAttribute

, và bản sao đặc tính của

WebPermission

WebPermissionAttribute

—Tất cả các quyền và các bản sao đặc tính của chúng cùng theo quy

ước đặt tên và là các thành viên của cùng không gian tên.
Ứng dụng

PermissionRequestExample

dưới đây có hai yêu cầu quyền: một cho

SocketPermission

và một cho

SecurityPermission

. Bạn cần nhớ các điều sau:

Bạn phải khai báo yêu cầu quyền sau bất kỳ lệnh

using

mức trên nào nhưng trước bất

kỳ khai báo kiểu hay không gian tên nào.

Đặc tính phải nhắm đến assembly nên bạn phải thêm tiền tố

assembly:

vào tên đặc tính.

Không cần thêm phần

Attribute

vào tên đặc tính—mặc dù bạn có thể thêm vào nếu

muốn.

Bạn phải chỉ định

SecurityAction.RequestMinimum

là đối số đầu tiên của đặc tính—giá

trị này cho biết đây là một yêu cầu quyền.

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.