Jeg er ved at læse op på gamle postings på Scott Hanselmans Computer Zen blog. Undervejs faldt jeg over artiklen “The Myth of .NET Purity” fra 2003.
Hovedbudskabet er at det er meningsløst at forsøge at sælge en løsning på at den er skrevet i “100% managed code”, da .NET frameworket alligevel i mange af de indbyggede klasser i BCL anvender unmanaged kode.
Der kommer mange aspekter op der taler for at det giver mening at sætte “100% managed code” som en ambition i kommentarerne, men af en eller anden årsag kommer hverken kommentatorerne eller Scott selv ind på det måske bedste argument – Code Access Security (CAS). Lige så snart du kalder ind i unmanaged kode kan du kaste en hvid pind efter CAS, da kodens opførsel da ikke længere kan verificeres af runtimet, med deraf følgende sikkerhedsmæssige konsekvenser. Dette gælder selvfølgeligt også for de i BCL’et indbyggede kald til unmanaged kode, men de har antageligvis brugt forholdsvis lang tid på at sikre at denne opførsel ikke kan “subvertes” i de klasser der tillader kald fra partially trusted assemblies
CAS må (desværre?) siges at være floppet slemt – ideen var god og med mange anvendelsesmuligheder (administrativ nedlåsning af kode fra trediepart, så man var sikker på det ikke lavede ravage; deployering af smart clients på internet, hosted deployment), men det slog aldrig rigtigt igennem (selvom der stadigt skriges fra elfenbenstårnene hos Microsoft).
Problemer var der nok af
- abysmalt ringe værkøjsunderstøttelse (hvorfor var der ikke et lettilgængeligt værktøj indbygget i Visual Studio der kunne lave en grovanalyse af hvilke permissions der var brug for? Hvorfor er værktøjet i VS 2005 kun tilgængelig for Smart Client projekter?)
- ingen lettilgængelig guidance
- GAC-assemblies eksekverer med FullTrust (af gode grunde, men gør det surt at håndtere delte assemblies man ikke stoler på)
-
CAS er, som al anden sikkerhed, svært (men det er nemt at ignorere CAS ved at dumpe assemblies i GAC’en, eller lade brugeren hjerneløst klikke på endnu en “do you want to work today”-prompt)
Når ikke engang chefarkitekten i et firma der driver en stor bid af USAs online banking kan bruge CAS til noget – hvem kan så?
Test