Question

imaginez l'environnement suivant: une application XBAP en cours d'exécution en mode confiance partielle (comportement par défaut; exigeant la pleine confiance n'est pas une option - mais avant de vous demander, si la confiance totale est donnée à la XBAP, tout fonctionne comme prévu ) fait référence à un ensemble installé localement, qui est situé dans le GAC. Pour ce faire, nous permettons à la possibilité de l'assemblée locale « de AllowPartiallyTrustedCallers », et aussi la confiance complète est accordée. (Imaginez cela est une sorte de contrepartie de la connectivité locale)

(par la façon dont nous sommes conscients des aspects de sécurité de l'utilisation de l'attribut AllowPartiallyTrustedCallers, cela est hors de portée de ce poste si, juste ne se soucient pas)

Maintenant, même si notre assemblée locale GAC a pleine confiance (nous pouvons vérifier cela en appelant Assembly.GetExecutingAssembly().IsFullyTrusted à tout moment), il échouera à toute demande (implicites ou explicites) car il est appelé par une partie appelant de confiance (notre XBAP). (corrigez-moi si je suis mal compris quelque chose) . Fortunatelly, nous pouvons faire explicitement affirme pour obtenir des autorisations au sein de notre assemblée locale GAC, par exemple:

new System.Security.Permissions.FileIOPermission(.....).Assert();

Par cela, nous pourrions empêcher une pile complète promenade sur demande à cet endroit précis et faire tout accès aux fichiers que nous voulons. (Encore une fois, s'il vous plaît me corriger ...) Cela fonctionne en fait parfaitement! (dans ce cas)

Le problème est, nous ne faisons pas un fichier IO, en fait, nous appelons bibliothèques externes qui devrait être en mesure de tout ce qu'ils veulent (et ils pourrait faire beaucoup de choses, l'accès au registre, ce qui rend les demandes de service web, écrire des fichiers, appelez le code non géré - en détail, nous ne savons pas, mais nous pouvons leur faire confiance), et empêcher la marche de la pile de la demande pour atteindre notre appelant en partie confiance . Nous devrions pouvoir y parvenir, puisque tout est fait à partir de notre installé localement et l'assemblage de confiance GAC. (Encore une fois, s'il vous plaît ne se soucient pas sur les aspects de sécurité ici, simplement supposer que nous pouvons faire confiance au client)

approche pour résoudre ceci:

  • Qu'est-ce que nous avons pensé d'abord, affirmait un ensemble d'autorisations (PermissionSet) à presque toute autorisation avant de travailler avec la bibliothèque externe. Cela fonctionne presque, mais il semble que, à un moment encore une exception de sécurité se produit - soit, parce que la bibliothèque externe pourrait commencer plus de fils qui ne parviennent par une raison quelconque, ou parce que son accès au entryassembly -. En fait, nous ne savons pas

  • En second lieu, nous avons essayé le ttribute suivant

[System.Security.Permissions.PermissionSet(
  System.Security.Permissions.SecurityAction.Assert, Name = "FullTrust")]

il ne fonctionne pas non plus.

  • En troisième lieu, nous avons pensé à l'ouverture d'un nouveau AppDomain, ce qui rend l'ensemble GAC entièrement fait confiance au point d'entrée AppDomains, et exécuter quoi que ce soit à l'intérieur de ce appdomain - une promenade de la pile n'a jamais pu atteindre le plus appelant partiellement confiance - dans notre théorie) . Unfortunatelly, nous ne sommes pas en mesure de cette ... Ou achive nouveau AppDomain ne réussit pas la demande encore plus, même si mis en place pour fonctionner sous des zones de sécurité « MyComputer » preuves ou SecurityPermission sans restriction. Je ne suis pas en mesure d'accorder explicitement une confiance totale à l'ensemble AppDomain.

  • Quatrièmement, l'utilisation n'est pas une option caspol . (Pour des raisons de déploiement)

Maintenant, puisque ce que j'espère que vous comprenez devrait être beaucoup d'informations, ce que nous voulons archiver.

Pour obtenir ce point: Comment un assemblage entièrement confiance faire valoir une confiance totale complète aux assemblées qu'elle appelle, arrêtant toutes les promenades pile pour atteindre l'appelant en partie confiance

Merci d'avance

Était-ce utile?

La solution

Vous cherchez la documentation de Microsoft en ce qui concerne personnes qui appellent partiellement de confiance Full assemblées fiduciaires Je ne crois pas que cela va être possible de le faire.

Vous gardez en soulignant que nous devons éviter les problèmes de sécurité, mais dans toute la réalité, ce que vous essayez de faire avec votre solution est dérivation pratiquement chaque partie unique du système de sécurité d'accès du code dans le .NET Framework, et je ll du mal à croire que vous allez être en mesure d'obtenir une solution viable.

En plus de cela, je ne peux pas imaginer que ce processus est quelque chose qui doit vraiment être fait de cette façon.

Ne pourriez-vous délester ce traitement de l'appelant en partie confiance pour ensuite passer des communications à quelque chose en cours d'exécution au niveau local et déjà fait confiance?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top