524
Chương 13: Bảo mật
Sử dụng các lệnh bảo mật khai báo (declarative security statement) để áp dụng
thành viên
SecurityAction.InheritanceDemand
vào phần khai báo của các lớp và
các thành viên bạn cần bảo vệ.
Các modifier như
sealed
,
public
,
private
, và
virtual
cho phép bạn kiểm soát khả năng của
các lớp khác khi các lớp này thừa kế lớp của bạn và chép đè các thành viên của nó. Tuy nhiên,
các modifier này không linh hoạt, không có khả năng chọn lọc khi giới hạn những mã lệnh
nào có thể thừa kế một lớp hoặc chép đè các thành viên của nó. Ví dụ, bạn muốn chỉ những
mã lệnh do công ty hay khoa của bạn viết thì mới có thể thừa kế các lớp nghiệp vụ quan trọng,
hoặc chỉ những mã lệnh được nạp từ máy cục bộ thì mới có thể thừa kế các phương thức nào
đó. Bằng cách áp dụng
InheritanceDemand
vào khai báo lớp hay thành viên, bạn có thể chỉ
định các quyền (lúc thực thi) mà một lớp phải có thì mới có thể thừa kế lớp của bạn hoặc chép
đè các thành viên cụ thể nào đó. Nhớ rằng, các quyền của một lớp là các quyền của assembly
mà lớp này được khai báo trong đó.
Mặc dù bạn có thể yêu cầu bất kỳ quyền hay tập quyền nào trong
InheritanceDemand
, nhưng
thông thường là yêu cầu các quyền định danh (identity permission). Quyền định danh mô tả
chứng cứ (evidence) do một assembly đưa cho bộ thực thi. Nếu một assembly đưa ra các kiểu
chứng cứ nào đó lúc nạp, bộ thực thi sẽ tự động gán cho assembly này quyền định danh phù
hợp. Quyền định danh cho phép bạn sử dụng các lệnh bảo mật bắt buộc và khai báo
(imperative và declarative security statement) để trực tiếp ra các quyết định bảo mật (security
decision) căn cứ trên định danh mã (code identity) mà không cần trực tiếp đánh giá các đối
tượng chứng cứ. Bảng 13-1 liệt kê kiểu quyền định danh được tạo cho mỗi kiểu chứng cứ
(kiểu chứng cứ là thành viên của không gian tên
System.Security.Policy
, kiểu quyền định
danh là thành viên của không gian tên
System.Security.Permissions
).
Bảng 13.1 Các lớp chứng cứ và các quyền định danh
Lớp chứng cứ
Quyền định danh
ApplicationDirectory
Không
Hash
Không
Publisher
PublisherIdentityPermission
Site
SiteIdentityPermission
StrongName
StrongNameIdentityPermission
Url
UrlIdentityPermission
Zone
ZoneIdentityPermission
Bộ thực thi gán các quyền định danh cho một assembly dựa trên chứng cứ do
assembly này đưa ra. Bạn không thể gán thêm quyền định danh cho một
assembly thông qua việc cấu hình chính sách bảo mật.
Bạn phải sử dụng cú pháp bảo mật khai báo (declarative security syntax) để hiện thực một
InheritanceDemand
, nên bạn phải sử dụng bản sao đặc tính (attribute counterpart) của lớp
quyền mà bạn muốn yêu cầu. Tất cả các lớp quyền đều có một bản sao đặc tính để tạo các