Przygotowałem mały przykład, w którym załadowałem zespół do nowej AppDomain bez żadnych uprawnień. To działa dobrze, zespół nie może uzyskać dostępu do systemu plików i nie może słuchać gniazd.Zapobieganie tworzeniu wątków w AppDomain
Ale jest jeszcze jedna rzecz, którą chcę zapobiec: Tworzenie nici. Czemu? Teoretycznie ten zespół może stworzyć wątek, który tworzy jeszcze więcej wątków i zalewa moją pamięć.
Pomyślałem o (moim zdaniem) najlepszym sposobie: Ograniczenie pamięci AppDomain. czy to możliwe? A jeśli nie, co mogę zrobić, aby uniknąć tworzenia wątków?
używany ten kod, aby utworzyć wątek
Thread t = new Thread(this.DoWork);
t.Start();
i ten kod 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, dałem dostęp do systemu plików w folderze, gdzie chcę, aby załadować montaż, to tylko dlatego, StrongName fullTrustAssembly = typeof(SecureInstance).Assembly.Evidence.GetHostEvidence<StrongName>();
nie działają na mnie albo
Nadzieja s/o może pomóc (:..
Nie można tego zrobić AFAIK :) Jedyne co możesz zrobić, to ustawić limit wątków w puli wątków – Elastep
AFAIK każda AppDomain musi utworzyć co najmniej jeden wątek - w przeciwnym razie nie może działać ... więc wyłączenie tworzenia wątku oznaczałoby, że nie może działać na wszystkich IMHO. Co próbujesz osiągnąć ? – Yahia
@Elastep Dzięki za odpowiedź, ale czy to jest bezpieczne? Myślę, że można rozszerzyć limit nici w dowolnym oprogramowaniu. Całość daje Javie wielki plus. W Javie program SecurityManager jest pytany przed utworzeniem wątku. –