Hoofdstuk 11 - Les 2

Declarative CAS zorgt ervoor dat de assembly alle benodigde permissions heeft; niet te veel en niet te weinig. Bijkomend voordeel is dat administrators direct weten welke rechten zij moeten toekennen aan de assembly.
Drie redenen om CAS declaraties te gebruiken:
  1. Om ervoor te zorgen dat runtime de applicatie nooit uitvoert zonder toegang te verkrijgen tot de benodigde bronnen.
  2. Om een kleine zandbak te maken van de applicatie om ervoor te zorgen dat een aanvaller de applicatie niet kan manipuleren om toegang te verkrijgen tot onbedoelde bronnen.
  3. Om te verifiëren dat applicaties worden uitgevoerd met gelimiteerde CAS permissions en daarom in partially trusted zones worden uitgevoerd.

CAS kan van een hoop bronnen de toegang regelen (van bestanden en mappen tot printers en netwerktoegang). Voor elk type bron dat kan worden beschermd, heeft het .NET Framework een class beschikbaar. Elke class heeft unieke members om de permissions te bepalen.
Omdat de permission attribuut classes erven van de CodeAccessSecurityAttribute class hebben zij allen standaard properties en methods. Je moet bekend zijn met deze twee standaard properties:
  1. Action - Specificeert de security action die genomen moet worden. Zet deze d.m.v. de SecurityAction enumeratie.
  2. Unrestricted – Een boolean die specificeert of een permission het mogelijk maakt om toegang te krijgen tot al de bronnen van de class.

Alle permission attribuut classes definiëren de Action property, wat aangeeft hoe runtime de permission moet worden geïnterpreteerd. Wanneer een CAS declaratie aangemaakt wordt moet de Action property gezet worden met een waarde van de SecurityAction enumeratie. De enumeratie kent drie keuzes:
  • SecurityAction.RequestMinimum (RequireMinimum)– Heeft een permission nodig voor de assembly om uit te voeren. Als de assembly niet de gespecificeerde CAS permission heeft, wordt runtime een System.Security.Policy.PolicyException gegooid.
  • SecurityAction.RequestOptional (RefuseAllExcept) – Weigert alle permissions die niet worden genoemd in de SecurityAction.RequestOptional of SecurityAction.RequestMinimum declaratie. Door deze permissions te zetten worde applicatie ervan verzekerd dat deze niet meer permissions heeft dan nodig. Als de assembly niet de juiste CAS permissions heeft wordt er geen exception gegooit, in tegenstelling tot SecurityAction.RequestMinimum.
  • SecurityAction.RequestRefuse – Vermindert de permissions die toegewezen zijn op een applicatie. Gebruik deze declaratie om de applicatie ervan te verzekeren dat deze geen toegang heeft tot kritische bronnen die potentieel misbruikt kunnen worden. Deze declaratie veroorzaakt nooit een exception.
[assembly:FileIOPermissionAttribute(SecurityAction.RequestMinimum, Read=@"C:\Windows\win.ini")]
namespace DeclarativeExample
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, world!");
}
}
}

Bovenstaand gebruikt SecurityAction.RequestMinimum om een exception te gooien als de assembly geen CAS permissies heeft om C:\Windows\win.ini te lezen.

TIP:CAS is enkel belangrijk voor partially trusted assemblies. De runtime negeert CAS declaraties colledig als de assembly fully trusted is.

Als SecurityAction.RequestOptional wordt gebruikt en de assembly moet worden ge-debugd dan moet de Unrestricted attribuut op true worden gezet, anders heeft de assembly geen recht om te communiceren met de debugger.
[assembly:FileIOPermissionAttribute(SecurityAction.RequestMinimum, Read=@"C:\Windows\win.ini")]
[assembly:UIPermission(SecurityAction.RequestMinimum, Unrestricted = true)]
namespace DeclarativeExample
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, world!");
}
}
}
Richtlijnen:
  • Gebruik SecurityAction.RequestMinimum declaraties om te beschrijven welke permissies er op zijn minst nodig zijn.
  • Gebruik SecurityAction.RequestOptional declaraties om elke permissie op te sommen welke assembly gebruikt
  • Gebruik SecurityAction.RequestRefuse om de permissies in de SecurityAction.RequestOptional lijst te verfijnen

Reacties

Populaire posts van deze blog

[SQL Server] varchar vs nvarchar

MS Sql 70-461: Chapter 5

[C#] Class serialiseren en deserialiseren