Question

Je souhaite tester le comportement d'un certain morceau de code .NET dans des environnements de confiance partielle.Quel est le moyen le plus rapide de configurer cela ?N'hésitez pas à supposer que moi (et les autres lecteurs) sommes de parfaits noobs du CAS.

@Pseudo:Merci pour la réponse.Hélas, l'outil en question est explicitement destiné au code non managé.Je n'ai pas dit « géré » dans ma question et je n'aurais pas dû supposer que les gens le déduiraient de la balise « .NET ».

Était-ce utile?

La solution

C'est une excellente question, notamment du point de vue du TDD et de la validation du code dans différents scénarios de confiance.

Je pense que la façon dont j'aborderais cela serait quelque chose du genre...

  • Créez un AppDomain dans mon code TDD en utilisant la surcharge AppDomain.CreateDomain() qui vous permet de transmettre un PermissionSet.Le PermissionSet serait construit pour correspondre aux différents scénarios de confiance que vous souhaitez tester.

  • Charger l'assembly contenant la logique testée dans le domaine de l'application

  • Créez des instances de types/méthodes d'appel, etc. dans le domaine de l'application, interceptez les exceptions de sécurité

Quelque chose comme ça.Je n'ai pas encore eu le temps de réaliser une preuve de concept.

Autres conseils

La fonctionnalité que vous recherchez est intégrée à Visual Studio :

Dans l'onglet sécurité de votre projet, il y a un bouton "Avancé..." qui vous permet de configurer si vous souhaitez déboguer en toute confiance ou sur un niveau de confiance spécifié.

Utilisez le Vérificateur d'applications Microsoft.

AppVerifier aide à déterminer :

  • Lorsque l'application utilise correctement les API :(API TerminateThread non sécurisées., Utilisation correcte des API Thread Local Storage (TLS)., o Utilisation correcte des manipulations de l'espace virtuel (par exemple, VirtualAlloc, MapViewOfFile).
  • Indique si l'application masque les violations d'accès à l'aide d'une gestion structurée des exceptions.
  • Indique si l'application tente d'utiliser des handles non valides.
  • S'il y a des corruptions de mémoire ou des problèmes dans le tas.
  • Si l'application manque de mémoire avec de faibles ressources.
  • Si l'utilisation correcte des sections critiques se produit.
  • Indique si une application exécutée dans un environnement administratif fonctionnera correctement dans un environnement avec moins de privilèges.
  • S'il existe des problèmes potentiels lorsque l'application s'exécute en tant qu'utilisateur limité.
  • S'il existe des variables non initialisées dans les futurs appels de fonction dans le contexte d'un thread.

Vous devriez consulter l'outil de configuration .NET Framework.Il se trouve dans le SDK .NET et vous pouvez trouver des instructions pour l'exécuter ici...http://msdn.microsoft.com/en-us/library/2bc0cxhc.aspx

Dans le Politique de sécurité d'exécution Dans la section, vous trouverez 3 niveaux de politique :Entreprise, Machine et Utilisateur.Si vous explorez Machine ou Utilisateur, vous trouverez des définitions de Groupes de codes et Ensembles d'autorisations .Lorsque vous dites que vous souhaitez tester du code .NET dans des environnements de confiance partielle, je suppose que vous souhaiterez tester l'un des ensembles d'autorisations standard déjà définis, tels que l'Internet .Vous devez définir un Groupe de codes qui correspond à votre application (ou à des assemblys spécifiques) et attribuez-lui l'ensemble d'autorisations que vous avez choisi Groupe de codes .

Vous pouvez définir votre propre coutume Ensembles d'autorisations aussi, mais gardons les choses simples pour l'instant.

Choisissez si vous souhaitez que votre nouveau groupe de codes existe à l’échelle de la machine ou uniquement pour votre compte utilisateur, et explorez le niveau de stratégie Machine ou Utilisateur en conséquence.Vous verrez un groupe de codes appelé _All _ Code_ .Créez un groupe de codes enfants à l'intérieur de celui-ci, en cliquant avec le bouton droit et en sélectionnant Nouveau...

Donnez-lui un nom, dites Groupe de confiance partiel , puis clique Suivant .

Vous devez spécifier une condition d’adhésion pour ce groupe, et il en existe différents types.J'aime créer un dossier spécifique appelé Confiance partielle sur ma machine, puis créez une condition d'adhésion à l'URL qui correspond.Donc, mon URL ressemble à ceci...fichier://c:/users/martin/documents/partialtrust/*

Le * est un caractère générique pour capturer n'importe quel assembly situé sous ce chemin.Cliquez sur Suivant .

Vous pouvez désormais choisir un ensemble d'autorisations pour votre nouveau groupe de codes.Pour l'instant, choisissez l'Internet .Il s'agit d'un ensemble assez restrictif, similaire à un bac à sable d'applet Java.Cliquez sur Suivant et Finition .

Maintenant, faites un clic droit sur votre nouveau groupe de codes et sélectionnez Propriétés.Dans l'onglet Général, assurez-vous que la case la plus haute est cochée, puis cliquez sur OK.

Désormais, tous les assemblys .NET chargés à partir d’un emplacement situé sous l’URL que vous avez spécifiée auront le l'Internet ensemble d’autorisations qui leur est appliqué.Attendez-vous à obtenir des SecurityExceptions si vous n'avez pas écrit votre code pour observer attentivement l'ensemble d'autorisations réduit.

Désolé, c'est une longue description.C'est vraiment beaucoup plus simple qu'il n'y paraît.

Je viens de publier un article intitulé Test de confiance partielle avec xUnit.net sur mon blog.Il détaille le framework basé sur xUnit.net que nous utilisons au sein de l'équipe Entity Framework pour exercer le code avec une confiance moyenne.

Voici un exemple de son utilisation.

public class SomeTests : MarshalByRefObject
{
    [PartialTrustFact]
    public void Partial_trust_test1()
    {
        // Runs in medium trust
    }
}

// Or...

[PartialTrustFixture]
public class MoreTests : MarshalByRefObject
{
    [Fact]
    public void Another_partial_trust_test()
    {
        // Runs in medium trust
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top