2009-09-11 8 views
0

Imaginez une application non fiable (plugin) qui lit à partir de l'entrée standard et écrit sur la sortie standard.Comment emballer une application non fiable?

Comment obtenir la sortie renvoyée pour l'entrée spécifiée par cette application pour éviter les effets secondaires? Par exemple, si une application supprime un fichier sur un disque, elle doit être détectée et cette tentative doit être annulée.

C'est une sorte d'application wrapper. Est-il possible de le construire?

Une tâche moins compliquée est trop intéressante: faites cette enveloppe en utilisant .NET (l'hôte et le client sont écrits en langage .NET).

+0

Avez-vous envisagé d'utiliser des domaines d'application avec une sécurité limitée? –

Répondre

5

Le moyen le plus sûr serait de charger ce plugin dans un separate AppDomain que vous configurez avec security evidence for the requirements you have. Lorsque vous créez un AppDomain, vous pouvez spécifier exactement les types de choses que le code peut faire dans ce sandbox. Le code qui s'exécute est limité aux limites que vous avez définies. Mais ce processus peut être déroutant la première fois que vous le faites et peut encore vous laisser vulnérable. L'utilisation de AppDomains pour isoler des assemblages est un processus intéressant. Vous pensez que vous chargez vos plugins dans l'autre AppDomain, puis utilisez-les via des proxies dans votre AppDomain, mais c'est l'inverse. Ils doivent utiliser vos procurations dans leur AppDomain. Si vous ne parvenez pas à comprendre et à faire cela correctement, vous finirez par charger votre code de plugin dans votre AppDomain principal et l'exécuter au lieu de dans le domaine restreint. Il y a beaucoup de pièges que vous obtiendrez (l'abonnement à des événements a des effets secondaires intéressants) si vous ne faites pas les choses correctement.

Je suggère le prototypage, brosse sur le chapitre AppDomain dans CLR Via C#, et lis autant que vous pouvez sur le sujet.


Voici une application de test que j'ai faite pour étudier les événements interdomaines.
http://cid-f8be9de57b85cc35.skydrive.live.com/self.aspx/Public/appdomainevents.rar

Questions connexes