Question

J'ai deux applications Web (sites pré-compilés), l'une est propriétaire et fonctionnera en toute confiance.Un autre est tiers et devrait fonctionner avec une confiance partielle (ou avec des autorisations spécifiques).

TrustedAssembly.Web.Pages.MyPage doit s'exécuter dans le AppDomain par défaut de confiance totale. UntrustedAssembly.Web.Pages.SomePage doit s'exécuter dans un AppDomain à confiance partielle.

De plus, si TrustedAssembly.Web.Pages.MyPage charge dynamiquement UntrustedAssembly.Web.Controls.SomeControl, est-il possible d'exécuter le contrôle en confiance partielle et / ou avec des autorisations spécifiques, alors que la page fonctionne sous confiance totale?

Et vice versa, par exempleUntrustedAssembly.Web.Controls.SomePage charge dynamiquement TrustedAssembly.Web.Controls.MyControl, est-il possible d'exécuter le contrôle en toute confiance alors que la page s'exécute sous confiance partielle?

Mise à jour / Pour info: c'est .NET 4

Était-ce utile?

La solution

Cela sera probablement un peu délicat.Voici deux pistes de réflexion possibles:

La première consiste à exécuter l'application en confiance moyenne, mais à placer tout ce que vous voulez exécuter en pleine confiance dans le GAC, et ce que vous voulez exécuter en confiance partielle dans bin.

Notez que dans votre scénario «vice versa», le contrôle de confiance peut avoir besoin d'effectuer une «assertion» de sécurité avant de pouvoir effectuer des opérations de confiance totale.par exemple

(new SecurityPermission(SecurityPermissionFlag.UnmanagedCode)).Assert();

La deuxième ligne de pensée consiste à exécuter l'application en confiance totale, mais ensuite à charger tout assembly que vous souhaitez exécuter en confiance moyenne à l'aide d'un Preuve .par exemple

var evidence = new Evidence();
// Initialize the Evidence
Assembly.LoadFrom(path, evidence);

Mais sachez que la configuration correcte de l'objet Evidence n'est pas pour les âmes sensibles, et je ne suis pas sûr que j'irais dans ce sens.

Ce n'est pas une réponse complète, mais j'espère que quelques idées peuvent en conduire une :)

Autres conseils

+1 à David Ebbo - exécuter toute l'application avec une confiance partielle et augmenter les appels de l'assemblage GACed n'est qu'une approche sensée.

Quelques points supplémentaires auxquels réfléchir ...

  • peu de classes sont conçues pour être déportées entre AppDomains. Les ASP.Net ne sont pas très éloignés ...
  • Les contrôles ASP.Net ont de très nombreux points d'intégration avec le runtime. Vous devrez créer des classes proxy très intéressantes pour restreindre correctement les interactions entre les contrôles et le runtime afin d'éviter d'éventuelles élévations et d'avoir un marshalling inter-domaines correct.
  • il est facile de «fuir» les classes d'autres assemblys au-delà des limites du domaine (le chargement personnalisé à partir d'un emplacement personnalisé permet d'éviter les «fuites» en rendant les échecs plus évidents). L'utilisation d'un framework avec beaucoup de points d'étensions (remplacements, événements) comme ASP.Net donne plus de chances d'amener des objets entre domaines.
  • cela ne vous aidera pas à exécuter du code arbitraire dans votre processus - vous déclarez la confiance (sens non-CLR) au code personnalisé en le chargeant simplement dans votre processus. C'est à dire. StackOverflow est réalisable par du code qui ne dispose que des autorisations d'exécution et il réduira de manière fiable votre processus.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top