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
là
SocketPermissionAttribute
, và bản sao đặc tính của
WebPermission
là
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.