Comment utiliser l’attribut AllowPartiallyTrustedCallers pour appeler un assembly avec un nom fort à partir d’une page Web à l’aide de Visual C# .NET, Visual C# 2005 ou une version ultérieure

Important Cet article contient des informations vous expliquant comment baisser les paramètres de sécurité ou comment désactiver certaines fonctions de sécurité sur un ordinateur. Vous pouvez apporter ces modifications pour contourner un problème spécifique. Cet article contient des informations vous expliquant comment baisser les paramètres de sécurité ou comment désactiver certaines fonctions de sécurité sur un ordinateur. Si vous implémentez cette solution de contournement, prendre toutes les mesures appropriées pour protéger votre système.

Résumé

Vous souhaiterez peut-être appeler un contrôle utilisateur Windows à partir d’une page Web. Pour appeler un contrôle utilisateur de Windows qui peut accéder aux ressources sécurisées et qui est généré sous la forme d’un assembly qui possède un nom fort, vous devez marquer l’assembly du contrôle utilisateur Windows avec l’attribut d’assembly AllowPartiallyTrusted . Vous devez également inclure un appel à la méthode Assert pour permettre au contrôle d’utilisateur Windows accéder à la ressource protégée.

INTRODUCTION

Cet article étape par étape décrit comment appeler un contrôle utilisateur Windows à partir d’une page Web. Le contrôle utilisateur Windows décrits dans cet article est construit comme un assembly qui possède un nom fort. L’exemple de cet article décrit comment utiliser l’attribut AllowPartiallyTrustedCallers de l’assembly afin qu’un assembly qui possède un nom fort est accessible à partir d’une page Web. L’exemple de l’article décrit également comment utiliser la méthode Assert .

Retour au début

Créer une paire de clés qui possède un nom fort

Une paire de clés qui possède un nom fort est utilisée pour signer un assembly d’un contrôle utilisateur qui possède un nom fort. Le nom fort est utilisé lorsque vous créez un groupe de codes qui accorde l’autorisation d’utiliser l’assembly à partir du code de niveau de confiance partiel.
  1. Ouvrez une invite de commande Visual Studio.

    Dans Microsoft Visual Studio .NET 2002, cliquez sur Démarrer, pointez sur
    Programmes, pointez sur Microsoft Visual Studio .NET, pointez sur Outils Visual Studio pour .NET, puis cliquez sur invite de commandes de Visual Studio .NET. La fenêtre d’invite de commandes de Visual Studio .NET s’affiche.

    Dans Microsoft Visual Studio .NET 2003, cliquez sur Démarrer, pointez sur programmes, pointez sur Microsoft Visual Studio .NET 2003, pointez sur Outils Visual Studio pour .NET, puis cliquez sur invite de commandes Visual Studio .NET 2003. La fenêtre d’invite de commandes Visual Studio .NET 2003 s’affiche.

    Dans Visual Studio 2005, cliquez sur
    Démarrer, pointez sur programmes, pointez sur
    Microsoft Visual Studio 2005, pointez vers Visual Studio 2005 Tools, puis cliquez sur invite de commandes de Visual Studio 2005. La fenêtre d’invite de commandes de Visual Studio 2005 s’affiche.

    Dans Visual Studio 2008, cliquez sur
    Démarrer, pointez sur programmes, pointez sur
    Microsoft Visual Studio 2008, pointez sur Visual Studio 2008 Tools, puis cliquez sur invite de commandes de Visual Studio 2008. La fenêtre d’invite Visual Studio 2008Command s’affiche.
  2. Tapez la ligne suivante à l’invite de commande et appuyez sur ENTRÉE :
    sn -k c:\snKey.snk
Retour au début

Créer un contrôle utilisateur Windows à l’aide de Microsoft Visual C# .NET, Microsoft Visual C# 2005 ou une version ultérieure

Avertissement Cette solution de contournement peut rendre votre ordinateur ou votre réseau plus vulnérable aux attaques d’utilisateurs malintentionnés ou de logiciels malveillants comme les virus. Nous ne recommandons pas cette solution de contournement, mais nous fournissons cette information afin que vous puissiez l'implémenter à votre convenance. Utilisez cette solution de contournement à vos risques et périls.

Ce contrôle utilisateur montre comment utiliser l’attribut AllowPartiallyTrustedCallers d’un assembly. Un assembly qui possède un nom fort ne peut être appelé par un appelant de confiance totale, à moins que l’assembly utilise l’attribut AllowPartiallyTrustedCallers . L’exemple de contrôle utilisateur montre également comment utiliser la méthode Assert . La méthode Assert déclare que le code appelant peut utiliser le code qui appelle la méthode Assert pour accéder à la ressource protégée par une demande d’autorisation. Le code peut accéder à la ressource même si les appelants qui sont plus hauts dans la pile n’ont pas reçus l’autorisation d’accéder à la ressource.

Ce contrôle utilisateur permet de sélectionner un fichier à l’aide de la boîte de dialogue Ouvrir. Puis, le contrôle ouvre le fichier texte dans la zone de liste. L’interface utilisateur de ce contrôle utilisateur contient une zone de texte et une zone de liste. La zone de texte affiche le nom du fichier qui est sélectionné et la zone de liste affiche le contenu du fichier sélectionné.

Lire le nom du fichier sélectionné à partir de la
Zone de OpenFileDialog , et pour lire le fichier, le type d’autorisation FileIOPermission doit être accordé. Le contrôle utilisateur doit avoir cette autorisation accordée par l’intermédiaire de son groupe de codes. La page Web qui appelle le contrôle ne dispose pas de cette autorisation.

Pour empêcher un parcours de pile qui n’a pas réussi car l’appelant ne possède pas le type d’autorisation FileIOPermission requis, utilisez la méthode Assert . Notez que la méthode Assert peut ouvrir des failles de sécurité si la méthode Assert est utilisée de manière incorrecte ou inappropriée. Par conséquent, vous devez utiliser la méthode Assert avec beaucoup de précautions. Une méthode RevertAssert doit suivre la méthode Assert , dès la fin de l’opération de fichier.

Remarque Pour vous assurer que le contenu du fichier s’affichent correctement dans la zone de liste, utilisez ce contrôle utilisateur pour sélectionner uniquement les fichiers texte.
  1. Démarrez Microsoft Visual Studio .NET, Microsoft Visual Studio 2005 ou une version ultérieure de Visual Studio.
  2. Dans le menu fichier , pointez sur
    De Nouveau, puis cliquez sur projet. La boîte de dialogue Nouveau projet s’affiche.
  3. Sous Types de projets, cliquez sur Projets Visual C#.

    Remarque Dans Visual Studio, cliquez sur Visual C# sous
    Types de projets.
  4. Sous modèles, cliquez sur Bibliothèque de contrôles Windows.
  5. Dans la zone nom , tapez
    UserControl.
  6. Cliquez sur OK.
  7. Dans la fenêtre de l’Explorateur de solutions, cliquez sur
    UserControl1.cs, puis cliquez sur Afficher le Code. Le fichier UserControl1.cs s’affiche.
  8. Remplacez le code existant par le code suivant :
    using System;using System.Collections;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Windows.Forms;
    using System.IO;
    using System.Security;
    using System.Security.Permissions;
    using System.Reflection;
    using System.Runtime.CompilerServices;

    [assembly:AllowPartiallyTrustedCallers]

    namespace UserControl
    {
    /// <summary>
    /// Summary description for UserControl1.
    /// </summary>
    public class UserControl1 : System.Windows.Forms.UserControl
    {
    private System.Windows.Forms.TextBox textBox1;
    private System.Windows.Forms.ListBox listBox1;
    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.Container components = null;

    public UserControl1()
    {
    // This call is required by the Windows.Forms Form Designer.
    InitializeComponent();

    // TODO: Add any initialization after the InitForm call.
    OpenFileDialog fileDialog = new OpenFileDialog();
    if(fileDialog.ShowDialog() == DialogResult.OK)
    {
    // Reading the name of the selected file from the OpenFileDialog box
    // and reading the file requires FileIOPermission.
    // The Assert command must be followed by a RevertAssert as soon as the file operation
    // is completed.
    new FileIOPermission(PermissionState.Unrestricted).Assert();
    textBox1.Text = fileDialog.FileName;
    // Display the contents of the file in the text box.
    FileStream fsIn = new FileStream(textBox1.Text, FileMode.Open, FileAccess.Read,
    FileShare.Read);
    StreamReader sr = new StreamReader(fsIn);

    // Process every line in the file.
    for (String Line = sr.ReadLine(); Line != null; Line = sr.ReadLine())
    {
    listBox1.Items.Add(Line);
    }
    // It is very important to call RevertAssert to restore the stack walk for
    // file operations.
    FileIOPermission.RevertAssert();
    }

    }

    /// <summary>
    /// Clean up any resources that are being used.
    /// </summary>
    protected override void Dispose( bool disposing )
    {
    if( disposing )
    {
    if( components != null )
    components.Dispose();
    }
    base.Dispose( disposing );
    }

    #region Component Designer generated code
    /// <summary>
    /// Required method for Designer support. Do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
    this.textBox1 = new System.Windows.Forms.TextBox();
    this.listBox1 = new System.Windows.Forms.ListBox();
    this.SuspendLayout();
    //
    // textBox1
    //
    this.textBox1.Location = new System.Drawing.Point(32, 16);
    this.textBox1.Name = "textBox1";
    this.textBox1.TabIndex = 0;
    this.textBox1.Text = "textBox1";
    //
    // listBox1
    //
    this.listBox1.Location = new System.Drawing.Point(144, 16);
    this.listBox1.Name = "listBox1";
    this.listBox1.Size = new System.Drawing.Size(120, 95);
    this.listBox1.TabIndex = 1;
    //
    // UserControl1
    //
    this.Controls.Add(this.listBox1);
    this.Controls.Add(this.textBox1);
    this.Name = "UserControl1";
    this.Size = new System.Drawing.Size(376, 120);
    this.ResumeLayout(false);

    }
    #endregion
    }
    }

  9. Dans l’Explorateur de solutions, cliquez sur
    AssemblyInfo.cs, puis cliquez sur Afficher le Code. Le fichier AssemblyInfo.cs apparaît.
  10. Recherchez le code suivant :
    [assembly: AssemblyVersion("1.0.*")]
    Remplacez ce code par le code suivant :
    [assembly: AssemblyVersion("1.0.0.0")]
  11. Recherchez le code suivant :
    [assembly: AssemblyKeyFile("")]
    Remplacez ce code par le code suivant :
    [assembly: AssemblyKeyFile("c:\\snKey.snk")]
  12. Dans le menu Générer , cliquez sur Générer la Solution.
Retour au début

Créer un groupe de codes pour affecter les autorisations de l’assembly.

Avertissement Cette solution de contournement peut rendre votre ordinateur ou votre réseau plus vulnérable aux attaques d’utilisateurs malintentionnés ou de logiciels malveillants comme les virus. Nous ne recommandons pas cette solution de contournement, mais nous fournissons cette information afin que vous puissiez l'implémenter à votre convenance. Utilisez cette solution de contournement à vos risques et périls.

Un groupe de codes détermine si un assembly répond à des critères définis par l’administrateur est désigné comme une condition d’appartenance. Si l’assembly correspond, le groupe de codes accorde un jeu d’autorisations qui a été associé à ce groupe de codes à l’assembly.

Pour créer un groupe de codes :
  1. Cliquez sur Démarrer, pointez sur
    Paramètres, puis cliquez sur Panneau de configuration. Le
    Fenêtre du Panneau de configuration s’affiche.
  2. Double-cliquez sur Outils d’administration. Le
    Fenêtre Outils d’administration s’affiche.
  3. Dans Microsoft Visual Studio .NET 2002, double-cliquez sur
    Configuration de Microsoft.NET Framework. La fenêtre de Configuration du.NET Framework s’affiche.

    Pour Microsoft Visual Studio .NET 2003, double-cliquez sur Microsoft.NET Framework 1.1 Configuration. La fenêtre de Configuration de .NET 1.1 s’affiche.

    Dans Microsoft Visual Studio 2005 ou une version ultérieure, double-cliquez sur
    Configuration de Microsoft.NET Framework 2.0. La fenêtre de Configuration de.NET Framework 2.0 s’affiche.
  4. Dans le volet gauche, développez Stratégie de sécurité du Runtime, développez ordinateuret puis développez Groupes de codes.
  5. Droit All_Code, puis cliquez sur
    Nouveau. L’Assistant créer un groupe de Code s’affiche.
  6. Assurez-vous que l’option créer un nouveau groupe de codes est sélectionné, tapez MyUserControlCodeGroup dans la
    Nom de zone, puis cliquez sur suivant. Le
    Page Choisir un type de condition s’affiche.
  7. Dans la liste Choisissez le type de condition pour ce groupe de codes , cliquez sur le Nom fort.
  8. Cliquez sur Importer. La boîte de dialogue Importation nom fort d’Assembly s’affiche.
  9. Recherchez le fichier UserControl.dll que vous avez créé dans la section « créer un contrôle utilisateur Windows à l’aide de Microsoft Visual C# .NET, Microsoft Visual C# 2005 ou une version ultérieure », puis cliquez sur Ouvrir.
  10. Cliquez sur suivant. La page attribuer un ensemble d’autorisations au groupe de codes s’affiche.
  11. Cliquez sur le jeu d’autorisations existant d’utilisation, sélectionnez
    FullTrust à partir de la liste, puis cliquez sur suivant. La page fin de l’Assistant s’affiche.
  12. Cliquez sur Terminer pour fermer l’Assistant de créer un groupe de codes.
Retour au début

Créez un fichier HTML pour appeler le contrôle utilisateur

Après avoir créé un groupe de codes pour affecter les autorisations de l’assembly, vous devez créer un fichier HTML pour appeler le contrôle utilisateur à partir du navigateur, et vous devez configurer l’environnement pour vous assurer que le contrôle utilisateur est appelé avec succès.
  1. Cliquez sur Démarrer, sur exécuter, tapez notepad, puis cliquez sur
    OK.
  2. Dans le bloc-notes, collez le code suivant :
    <OBJECT id="MyWinControl1" height="200" width="200" classid="http:UserControl.dll#UserControl.UserControl1" VIEWASTEXT>    
    </OBJECT>
  3. Dans le dossier racine de Microsoft Internet Information Services (IIS), enregistrez le fichier sous CallUserControl.htm.
  4. Copiez le fichier UserControl.dll que vous avez créé dans la section « créer un contrôle utilisateur Windows à l’aide de Microsoft Visual C# .NET, Microsoft Visual C# 2005 ou une version ultérieure » dans le dossier racine IIS.
  5. Ouvrez Microsoft Internet Explorer.
  6. Dans la zone adresse , tapez
    http://localhost/CallUserControl.htmet appuyez sur ENTRÉE. La boîte de dialogue Ouvrir s’affiche.
  7. Rechercher un fichier texte, puis cliquez sur Ouvrir. Le texte du fichier s’affiche dans le contrôle de zone de liste sur le navigateur.
Retour au début

Références

Pour plus d'informations, visitez les sites Web de Microsoft Developer Network (MSDN) suivant :
Configuration de groupes de codes à l’aide de l’outil.NET Framework Configuration tool
http://msdn2.microsoft.com/en-us/library/eb8xw74a(vs.71).aspx

Méthode CodeAccessPermission.Assert
http://msdn2.microsoft.com/en-us/library/system.security.codeaccesspermission.assert(vs.71).aspx

Les assemblys.NET Framework et l’attribut AllowPartiallyTrustedCallers
http://msdn2.microsoft.com/en-us/library/aa302328.aspx

Classe AllowPartiallyTrustedCallersAttribute
http://msdn2.microsoft.com/en-us/library/system.security.allowpartiallytrustedcallersattribute(vs.71).aspx

Considérations sur la sécurité assembly
http://msdn2.microsoft.com/en-us/library/ab4eace3(vs.71).aspx

Brèves de sécurité : les noms forts et sécurité dans le.NET Framework

http://msdn2.microsoft.com/en-us/library/aa302416.aspx
Retour au début
Propriétés

ID d'article : 839300 - Dernière mise à jour : 27 janv. 2017 - Révision : 1

Commentaires