How can I use CAS in .NET 4 to lock down my MEF ex

2019-02-19 02:21发布

问题:

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:

  1. Host and Application should be SecurityCritical
  2. Contracts should be SecuritySafeCritical
  3. All 3rd party extensions should be SecurityTransparent

I 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?

回答1:

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