Hoofdstuk 8 - Les 2

Door restricties toe te kennen aan een application domain, verkleint dat de kans dat de assembly kwaadaardige acties uitvoert.

Defense-in-depth is het beveiligings principe van het aanbieden van meerdere vormen van protectie zodat je nog steeds bevieligd bent tijdens een kwaadwillige actie. Dit is vooral belangrijk bij externe code.

Voor de assemblies die binnen een application domain worden opgestart is er volledige controle over de host evidence. Evidence is de informatie die de runtime verzameld over een assembly om te bepalen tot welke code groups de assembly behoort. De code groups bepalen op hun beurt de privileges van de assembly . Standaard vormen van evidence zijn de map of web site waaruit de assembly wordt uitgevoerd.

Om evidance aan een assembly mee te geven moet eerst een System.Security.Policy.Evidence object worden aangemaakt en worden meegegeven aan de ExecuteAssembly methode.

Wanneer een evidence wordt aangemaakt moeten er twee parameters, beide object arrays, worden meegegeven. De eerste array representeert de host evidence en de tweede een array met assembly evidence. De evidence kan van alles zijn (string, int, eigen class).

De eenvoudigste manier om permissies toe te kennen aan een assembly in een application domain is door een System.Security.Policy.Zone object door te geven en een System.Security.SecurityZone enumeratie.
object[] hostEvidence = {new Zone(SecurityZone.Internet)};

Evidence internetEvidence = new Evidence(hostEvidence, null);
AppDomain d = AppDomain.CreateDomain("MyDomain");
d.ExecuteAssembly("SecondAssembly.exe", internetEvidence);
Deze code voert 'SecondAssembly' uit in een geisoleerde met alleen de permissies die de vastgesteld zijn voor de Internet_Zone groep.

Host evidence kan worden aangeboden aan een complete application domain.
object[] hostEvidence = {new Zone(SecurityZone.Internet)};
Evidence appDomainEvidence = new Evidence(hostEvidence, null);
AppDomain a = AppDomain.CreateDomain("MyDomain", appDomainEvidence);
d.ExecuteAssembly("SecondAssembly.exe");
De Evidence.AddAssembly en Evidence.AddHost methodes kunnen gebruikt worden om evidence toe te voegen nadat een Evidence object is aangemaakt.

Met de AppDomainSetup class kan de CLR informatie worden verschaft voor een nieuwe application domain. De belangrijkste property voor een application domain is ApplicationBase. De andere AppDomainSetup properties worden voornamelijk gebruikt door runtime hosts om bepaalde application domains te configureren. Veranderingen in de AppDomainSetup object heeft geen invloed op de bestaande AppDomain, enkel nieuwe appdomains met de AppDomainSetup object als parameter.
AppDomainSetup ads = new AppDomainSetup();
// Zet de naam van de root map waar de applicatie staat
ads.ApplicationBase = "file://" + System.Environment.CurrentDirectory;
// sta toe dat de application assembly binding redirection toestaat
ads.DisallowBindingRedirects = false;
// Er mogen geen dingen via het http protocol worden gedownload
ads.DisallowCodeDownload = true;
// Bepaal de locatie van het configuratie bestand
ads.ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;

AppDomain d = AppDomain.CreateDomain("New domain", null, ads);

Reacties

Populaire posts van deze blog

[SQL Server] varchar vs nvarchar

MS Sql 70-461: Chapter 5

[C#] Class serialiseren en deserialiseren