Reputation: 13839
I have an application in .NET 4 that uses MEF for extensibility. My main application has three assemblies: Host
, Application
and Contracts
.
Host
is the "boot-strapping" executable that creates the container and does the composition.
Application
contains the logic of my application, and more extension points for 3rd parties.
Contracts
contains the interfaces (and some helper classes) that are used in the extension points.
Therefore, someone developing a 3rd party application has to include a reference to Contracts
, but not to Application
.
I'm thinking that my security model should look like this:
Host
and Application
should be SecurityCriticalContracts
should be SecuritySafeCriticalI think that 1. will be satisfied by default. I know that I can implement 2. with an assembly attribute. The question is, how do I enforce rule 3.? Does the operating system do this automatically by flagging all downloaded extensions as untrusted? Is it possible for a downloaded extension assembly to become fully trusted?
Upvotes: 3
Views: 390
Reputation: 16744
If your application is running in full trust, then by default your extensions will be running in full trust and be able to do anything they want. It won't matter what the security attributes on them are. To limit what extensions can do, you need to create a sandbox appdomain. You would set your Host
and Application
as fully trusted in that AppDomain and all other code would only have the permissions you grant it.
Here's an MSDN article on this topic: How to: Run Partially Trusted Code in a Sandbox
Upvotes: 3