516
Chương 13: Bảo mật
3.
3.
Vô hi u vi c ki m tra quy n th c thi
ệ
ệ ể
ề
ự
Vô hi u vi c ki m tra quy n th c thi
ệ
ệ ể
ề
ự
Bạn cần ngăn bộ thực thi kiểm tra mỗi assembly được nạp vào có quyền thực thi
(execution permission) hay không.
Thiết lập thuộc tính
CheckExecutionRights
của lớp
System.Security.
SecurityManager
là
false
rồi lưu lại bằng phương thức
SecurityManager.
SavePolicy
. Bạn cũng có thể sử dụng công cụ Code Access Security Policy
(Caspol.exe) và thực thi lệnh
caspol –e off
.
Mỗi khi nạp assembly, bộ thực thi bảo đảm grant-set của assembly này có chứa phần tử
Execution
của
SecurityPermission
. Bộ thực thi hiện thực một quá trình phân giải chính sách
“lười” (lazy policy resolution process), nghĩa là grant-set của một assembly không được tính
cho đến khi có một yêu cầu bảo mật (security demand) được thực hiện trên assembly này.
Việc kiểm tra quyền thực thi không chỉ buộc bộ thực thi kiểm tra mỗi assembly có quyền thực
thi hay không, mà còn gián tiếp tạo ra việc phân giải chính sách đối với mỗi assembly được
nạp, phủ nhận lợi ích của việc phân giải chính sách “lười”. Các yếu tố này có thể gây ra sự trì
hoãn đáng kể khi các assembly được nạp, đặc biệt khi bộ thực thi nạp nhiều assembly cùng
một lúc.
Trong nhiều trường hợp, việc cho phép mã lệnh nạp và chạy không phải là một nguy cơ đáng
kể miễn là tất cả các hoạt động và các tài nguyên quan trọng khác đã được bảo vệ bằng CAS
và bằng cơ chế bảo mật của hệ điều hành. Bộ thực thi .NET cho phép bạn vô hiệu việc tự động
kiểm tra các quyền thực thi ngay bên trong mã lệnh, hay bằng công cụ Caspol.exe.
Khi bạn nhập lệnh
caspol –e off
hoặc
caspol –e on
, Caspol.exe sẽ xác lập thuộc tính
CheckExecutionRights
của lớp
SecurityManager
. Bạn có thể thực hiện công việc này bên
trong mã lệnh như sau:
// Vô hiệu việc kiểm tra quyền thực thi.
System.Security.SecurityManager.CheckExecutionRights = false;
// Lưu cấu hình.
System.Security.SecurityManager.SavePolicy();
// Kích hoạt việc kiểm tra quyền thực thi.
System.Security.SecurityManager.CheckExecutionRights = true;
// Lưu cấu hình.
System.Security.SecurityManager.SavePolicy();
Để thay đổi giá trị của
CheckExecutionRights
thì mã lệnh của bạn phải có phần tử
ControlPolicy
của
SecurityPermission
. Thay đổi này sẽ có tác dụng với tiến trình hiện hành
ngay tức thì, cho phép bạn nạp các assembly trong lúc thực thi mà bộ thực thi không phải