12.7 Security Permissions
The assembly forms a
boundary for security permissioning.
The assembly manifest contains hashes for any referenced assemblies
(determined at compile time), a list of the minimum set of security
permissions the assembly requires in order to function, a list of the
optional permissions that it requests, and a list of the permissions
that it explicitly refuses (i.e., never wants to receive).
To illustrate how these permissions might be used, imagine an email
client similar to Microsoft Outlook, developed using the .NET
Framework. It probably requires the ability to communicate over the
network on ports 110 (POP3), 25 (SMTP), and 143 (IMAP4). It might
request the ability to run JavaScript functions in a sandbox to allow
full interactivity when presenting HTML emails. Finally, it probably
refuses ever being granted the ability to write to disk or read the
local address book, thus avoiding scripting attacks such as the
ILoveYou virus.
Essentially, the assembly declares its security needs and
assumptions, but leaves the final decision on permissioning up to the
CLR, which enforces local security policy.
At runtime the CLR uses the hashes to determine whether a dependent
assembly has been tampered with, and combines the assembly permission
information with local security policy to determine whether to load
the assembly and which permissions to grant it.
This mechanism provides fine-grained control over security and is a
major advantage of the .NET Framework over traditional Windows
applications.
|