513
Chương 13: Bảo mật
hội sử dụng các tính năng của assembly cho các mục đích nguy hiểm, và không thể khảo sát
assembly để tìm các lỗ hổng có thể khai thác được. Dĩ nhiên, lý thuyết này giả định rằng bạn
quản lý chính sách bảo mật một cách phù hợp. Nếu bạn gán tất cả mã lệnh có độ tin cậy toàn
phần, không chỉ bất kỳ assembly nào cũng có thể truy xuất assembly tên mạnh của bạn, mà
mã lệnh này còn có thể truy xuất tất cả các chức năng của .NET Framework. Điều này sẽ là
một tai họa bảo mật!
Nếu bạn thiết kế, hiện thực, và thử nghiệm assembly chia sẻ của bạn một cách
phù hợp bằng CAS để giới hạn việc truy xuất đến các thành viên quan trọng, bạn
không cần áp đặt một hạn chế bao trùm để ngăn mã lệnh có-độ-tin-cậy-một-
phần sử dụng assembly của bạn. Tuy nhiên, đối với một assembly bất kỳ, không
thể chứng minh rằng không có lỗ hổng bảo mật nào để mã nguy hiểm có thể lợi
dụng. Do đó, bạn nên xem xét cẩn thận nhu cầu cho phép mã lệnh có-độ-tin-cậy-
một-phần truy xuất assembly tên mạnh trước khi áp dụng đặc tính
AllowPartiallyTrustedCallersAttribute
.
Bộ thực thi ngăn mã lệnh có-độ-tin-cậy-một-phần truy xuất các assembly tên mạnh bằng cách
đặt
LinkDemand
vào tập quyền
FullTrust
trên mọi thành viên công-khai (public) và được-bảo-
vệ (protected) của mỗi kiểu khả-truy-xuất-công-khai được định nghĩa trong assembly. Điều
này có nghĩa là chỉ những assembly được cấp các quyền tương đương với tập quyền
FullTrust
thì mới có thể truy xuất các kiểu và thành viên trong assembly tên mạnh. Việc áp
dụng
AllowPartiallyTrustedCallersAttribute
vào assembly tên mạnh báo với bộ thực thi
không buộc
LinkDemand
có hiệu lực trên các thành viên và các kiểu bên trong.
Bộ thực thi chịu trách nhiệm buộc các hoạt động bảo mật ngầm
LinkDemand
có
hiệu lực để bảo vệ các assembly tên mạnh; C# assembler không sinh ra các lệnh
khai báo
LinkDemand
lúc biên dịch.
Đoạn mã dưới đây trình bày một ứng dụng có sử dụng đặc tính
AllowPartiallyTrustedCallersAttribute
. Chú ý rằng, bạn phải sử dụng tiền tố
assembly:
để
báo với trình biên dịch rằng đích của đặc tính này là assembly (còn được gọi là đặc tính toàn
cục—global attribute). Ngoài ra, không cần thêm phần
Attribute
vào tên của đặc tính—mặc
dù bạn có thể thêm vào nếu muốn. Vì bạn nhắm đến assembly nên đặc tính này phải được đặt
sau các lệnh
using
mức trên, nhưng trước các khai báo không gian tên và kiểu.
using System.Security;
[assembly:AllowPartiallyTrustedCallers]
public class AllowPartiallyTrustedCallersExample {
§
}
Thực tế, tất cả các đặc tính toàn cục đều nằm trong một file độc lập với phần mã
lệnh còn lại của ứng dụng. Microsoft Visual Studio .NET sử dụng cách tiếp cận
này: tạo một file có tên là AssemblyInfo.cs để chứa tất cả các đặc tính toàn cục.