Tôi đã thiết lập một ví dụ nhỏ khi tôi tải một assembly vào một AppDomain mới mà không có bất kỳ quyền nào. Điều này hoạt động tốt, lắp ráp không thể truy cập vào hệ thống tập tin và không thể nghe các ổ cắm.Ngăn chặn tạo chuỗi trong AppDomain
Nhưng có một điều tôi muốn ngăn chặn: Tạo chủ đề. Tại sao? Nguyên nhân lý thuyết này lắp ráp có thể tạo ra một sợi mà tạo ra nhiều chủ đề hơn và làm ngập bộ nhớ của tôi.
Tôi đã nghĩ đến (theo ý kiến của tôi) cách tốt nhất: Hạn chế bộ nhớ của một AppDomain. Điều này có thể không? Và nếu không, tôi có thể làm gì để tránh tạo luồng?
Đã sử dụng mã này để tạo ra các chủ đề
Thread t = new Thread(this.DoWork);
t.Start();
Và mã này cho AppDomain
PermissionSet set = new PermissionSet(PermissionState.None);
set.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
set.AddPermission(new FileIOPermission(FileIOPermissionAccess.Read |
FileIOPermissionAccess.PathDiscovery,
this.path));
AppDomainSetup info = new AppDomainSetup { ApplicationBase = this.path };
this.domain = AppDomain.CreateDomain("Sandbox", null, info, set, null);
(Ok, tôi đã cung cấp quyền truy cập vào hệ thống tập tin trong thư mục mà tôi muốn nạp lắp ráp, điều này chỉ vì StrongName fullTrustAssembly = typeof(SecureInstance).Assembly.Evidence.GetHostEvidence<StrongName>();
cũng không hoạt động đối với tôi.
Hy vọng có thể trợ giúp. (:
Không có cách nào bạn có thể làm điều này AFAIK :) Điều duy nhất bạn có thể làm là thiết lập giới hạn của các chủ đề trong một hồ bơi thread – Elastep
AFAIK mỗi AppDomain cần tạo ít nhất một luồng - nếu không nó không thể chạy ... vì vậy việc vô hiệu hóa tạo luồng sẽ có nghĩa là nó không thể chạy ở tất cả IMHO. Bạn đang cố gắng đạt được điều gì? – Yahia
@Elastep Cảm ơn câu trả lời của bạn, nhưng điều này có an toàn không? Tôi nghĩ rằng có thể mở rộng giới hạn chuỗi tại bất kỳ phần mềm nào. Toàn bộ điều này mang lại cho Java một lợi thế lớn. Trong Java, SecurityManager được hỏi trước khi tạo luồng. –