Wie Sie das AllowPartiallyTrustedCallers-Attribut eine Assembly aufrufen, der einen starken Namen auf einer Webseite mit Visual C# .NET, Visual C# 2005 oder höher

Wichtig Dieser Artikel enthält Informationen dazu, wie Sie Sicherheitseinstellungen herabsetzen oder Sicherheitsfunktionen auf einem Computer deaktivieren können. Sie können diese Änderungen vornehmen, um ein bestimmtes Problem zu umgehen. Bevor Sie diese Änderungen vornehmen, empfehlen wir, dass Sie die Risiken abschätzen, die mit dieser Problemumgehung in Ihrer speziellen Umgebung verbunden sind. Wenn Sie diese Problemlösung implementieren, führen Sie alle entsprechenden zusätzlichen Schritte durch, um Ihr System zu schützen.

Zusammenfassung

Möglicherweise möchten ein Windows-Benutzersteuerelement auf einer Webseite aufrufen. Rufen ein Windows-Benutzersteuerelement, das Zugriff auf gesicherte Ressourcen und als eine Assembly einen starken Namen erstellt wird, müssen Sie die Assembly des Benutzersteuerelements Windows AllowPartiallyTrusted Assembly-Attribut kennzeichnen. Sie müssen einen Aufruf der Methode das Benutzersteuerelement Windows Zugriff auf die geschützten Ressourcen können auch.

Einführung

Dieser Artikel beschreibt, wie ein Windows-Benutzersteuerelement auf einer Webseite. Windows-Benutzersteuerelement, das in diesem Artikel beschrieben wird als Assembly erstellt, die einen starken Namen verfügt. Das Beispiel in diesem Artikel beschreibt, wie das AllowPartiallyTrustedCallers -Attribut der Assembly verwenden, damit eine Assembly einen starken Namen von einer Webseite zugegriffen werden kann. Das Beispiel im Artikel beschreibt auch die Assert -Methode verwenden.

zurück zum Anfang

Erstellen Sie ein Schlüsselpaar, das einen starken Namen hat

Ein Schlüsselpaar mit dem starken Namen dient zum Signieren einer Assembly für ein Benutzersteuerelement, das einen starken Namen hat. Der starke Name wird verwendet, wenn Sie eine Codegruppe, die Berechtigung erstellen für die Assembly von teilweise vertrauenswürdigem Code gewährt.
  1. Öffnen Sie ein Visual Studio-Eingabeaufforderungsfenster.

    Klicken Sie in Microsoft Visual Studio .NET 2002 auf Start, zeigen Sie auf
    Programme, zeigen Sie auf Microsoft Visual Studio .NET, zeigen Sie auf Visual Studio .NET Toolsund Befehlszeile von Visual Studio .NETklicken. Visual Studio .NET Eingabeaufforderungsfenster wird angezeigt.

    Klicken Sie in Microsoft Visual Studio .NET 2003 auf Start, zeigen Sie auf Programme, Microsoft Visual Studio .NET 2003, Visual Studio .NET Toolsund klicken Sie dann auf Visual Studio .NET 2003-Command Prompt. Visual Studio .NET 2003 Eingabeaufforderungsfenster wird angezeigt.

    Klicken Sie in Visual Studio 2005
    Start, zeigen Sie auf Programme, zeigen Sie auf
    Microsoft Visual Studio 2005auf Visual Studio 2005-Toolsund klicken Sie dann auf Visual Studio 2005 Command Prompt. Das Visual Studio 2005-Eingabeaufforderungsfenster wird angezeigt.

    Klicken Sie in Visual Studio 2008
    Start, zeigen Sie auf Programme, zeigen Sie auf
    Microsoft Visual Studio 2008, Visual Studio 2008-Toolszeigen und klicken Sie dann auf Visual Studio 2008 Command Prompt. Visual Studio 2008Command-Eingabeaufforderungsfenster wird angezeigt.
  2. Geben Sie Folgendes an der Befehlszeile und dann die EINGABETASTE:
    sn -k c:\snKey.snk
zurück zum Anfang

Erstellen Sie ein Windows-Benutzersteuerelement mithilfe von Microsoft Visual C# .NET, Microsoft Visual C# 2005 oder höher

Warnung Diese Abhilfe kann Ihren Computer oder Ihr Netzwerk anfälliger für Angriffe durch böswillige Benutzer oder gefährliche Software wie etwa Viren. Wir empfehlen diese Problemumgehung nicht, stellen jedoch diese Informationen bereit, damit Sie diese Option nach eigenem Ermessen anwenden können. Verwenden Sie diese Problemumgehung auf eigene Verantwortung.

Dieses Benutzersteuerelement veranschaulicht das AllowPartiallyTrustedCallers -Attribut einer Assembly. Eine Assembly einen starken Namen kann nur ein vollständig vertrauenswürdiger Aufrufer aufgerufen werden, wenn die Assembly das AllowPartiallyTrustedCallers -Attribut verwendet. Das für das Benutzersteuerelement demonstriert auch die Assert -Methode verwenden. Die Assert -Methode deklariert, dass der aufrufende Code den Code verwenden kann, der der Assert -Methode auf die Ressource zugreifen, die von einer Berechtigungsabfrage geschützt ist. Der Code kann auf die Ressource zugreifen, selbst wenn Aufrufer in der Aufrufliste sind nicht die Zugriffsberechtigung für die Ressource erteilt wurde.

Dieses Steuerelement ermöglicht die Auswahl eine Datei im Dialogfeld Öffnen mit. Das Steuerelement öffnet dann die Datei im Listenfeld. Die Benutzeroberfläche dieses Steuerelement enthält ein Textfeld und einem Listenfeld. Das Textfeld zeigt den Namen der ausgewählten Datei und im Listenfeld zeigt den Inhalt der ausgewählten Datei.

Der Name der ausgewählten Datei Lesen der
Dialogfeld, und zum Lesen der Datei muss die Art der Berechtigung FileIOPermission erteilt werden. Das Benutzersteuerelement muss diese Berechtigung über die Codegruppe. Webseite, die das Steuerelement aufruft, muss diese Berechtigung nicht.

Um einen Stackwalk zu verhindern, der nicht erfolgreich ist, da der Aufrufer nicht den erforderlichen FileIOPermission Berechtigungstyp, verwenden der Assert -Methode. Beachten Sie, dass die Assert -Methode Sicherheitslücken öffnen kann, wenn die Assert -Methode nicht ordnungsgemäß oder nicht ordnungsgemäß verwendet wird. Daher müssen Sie die Assert -Methode mit Vorsicht verwenden. Eine Methode RevertAssert muss die Assert -Methode folgen, sobald der Vorgang abgeschlossen ist.

Hinweis Um sicherzustellen, dass der Inhalt der Datei ordnungsgemäß im Listenfeld angezeigt werden, verwenden Sie dieses Steuerelement nur Textdateien auswählen.
  1. Starten Sie Microsoft Visual Studio .NET, Microsoft Visual Studio 2005 oder eine höhere Version von Visual Studio.
  2. Zeigen Sie im Menü Datei auf
    Neu, und klicken Sie dann auf Projekt. Das Dialogfeld Neues Projekt angezeigt wird.
  3. Klicken Sie unter Projekttypenauf Visual C#-Projekte.

    Hinweis Klicken Sie in Visual Studio auf Visual C# unter
    Projekttypen.
  4. Klicken Sie unter Vorlagenauf Windows-Steuerelementbibliothek.
  5. Geben Sie im Feld Name
    UserControl.
  6. Klicken Sie auf OK.
  7. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste
    UserControl1.cs, und klicken Sie dann auf Code anzeigen. Die Datei "UserControl1.cs" wird angezeigt.
  8. Ersetzen Sie den vorhandenen Code durch folgenden Code:
    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. Im Projektmappen-Explorer mit der rechten Maustaste
    AssemblyInfo.cs, und klicken Sie dann auf Code anzeigen. Die Datei AssemblyInfo.cs wird angezeigt.
  10. Suchen Sie den folgenden Code:
    [assembly: AssemblyVersion("1.0.*")]
    Ersetzen Sie diesen Code durch folgenden Code:
    [assembly: AssemblyVersion("1.0.0.0")]
  11. Suchen Sie den folgenden Code:
    [assembly: AssemblyKeyFile("")]
    Ersetzen Sie diesen Code durch folgenden Code:
    [assembly: AssemblyKeyFile("c:\\snKey.snk")]
  12. Klicken Sie im Menü Erstellen auf Projektmappe erstellen.
zurück zum Anfang

Erstellen Sie eine Gruppe zum Zuweisen von Berechtigungen für die assembly

Warnung Diese Abhilfe kann Ihren Computer oder Ihr Netzwerk anfälliger für Angriffe durch böswillige Benutzer oder gefährliche Software wie etwa Viren. Wir empfehlen diese Problemumgehung nicht, stellen jedoch diese Informationen bereit, damit Sie diese Option nach eigenem Ermessen anwenden können. Verwenden Sie diese Problemumgehung auf eigene Verantwortung.

Eine Codegruppe bestimmt, ob eine Assembly entspricht Administrator definierten Kriterien eine Mitgliedsschaftsbedingung genannt. Wenn Assembly übereinstimmt, gewährt die Codegruppe der Assembly einen Satz von Berechtigungen, der dieser Codegruppe zugeordnet wurde.

So erstellen eine Codegruppe
  1. Klicken Sie auf Start, zeigen Sie auf
    Standardeinstellungen, und klicken Sie dann auf Bedienfeld. Die
    Kontrollfeld -Fenster wird angezeigt.
  2. Doppelklicken Sie auf Verwaltung. Die
    Verwaltung angezeigt.
  3. Doppelklicken Sie auf Microsoft Visual Studio .NET 2002
    Microsoft.NET Framework-Konfiguration. .NET Framework-Konfiguration angezeigt.

    Doppelklicken Sie auf Microsoft.NET Framework 1.1-Konfigurationfür Microsoft Visual Studio .NET 2003. .NET Konfiguration 1.1 angezeigt.

    Doppelklicken Sie in Microsoft Visual Studio 2005 oder höher
    Microsoft.NET Framework 2.0-Konfiguration. .NET Framework 2.0-Konfiguration angezeigt.
  4. Im linken Bereich Laufzeitsicherheitsrichtlinie, Computerund erweitern Sie dann Codegruppen.
  5. Maustaste All_Code, und klicken Sie dann auf
    Neue. Codegruppe erstellen-Assistent wird angezeigt.
  6. Stellen Sie sicher, dass eine neue Codegruppe erstellen ausgewählt ist, geben Sie MyUserControlCodeGroup in der
    Namen und dann auf Weiter. Die
    Wählen Sie einen Bedingungstyp angezeigt.
  7. Klicken Sie in der Liste Wählen Sie den Bedingungstyp für die Codegruppe auf Strong Name.
  8. Klicken Sie auf Importieren. Das Dialogfeld Import Strong Name aus Assembly .
  9. Suchen Sie die Datei UserControl.dll, die im Abschnitt "Erstellen Sie ein Windows-Benutzersteuerelement mit Microsoft Visual C# .NET oder Microsoft Visual C# 2005 höher" erstellt und dann auf Öffnen.
  10. Klicken Sie auf Weiter. Der Berechtigungssatz der Codegruppe zuordnen wird angezeigt.
  11. Klicken Sie auf vorhandenen Berechtigungssatz verwenden
    FullTrust aus, und klicken Sie dann auf Weiter. Die Seite Fertigstellen des Assistenten wird angezeigt.
  12. Klicken Sie auf Fertig stellen , zum Schließen des Assistenten Codegruppe erstellen.
zurück zum Anfang

Erstellen Sie eine HTML-Datei des Benutzersteuerelements aufrufen

Nachdem Sie eine Gruppe zum Zuweisen von Berechtigungen für die Assembly erstellen, erstellen Sie eine HTML-Datei des Benutzersteuerelements aus dem Browser aufrufen und müssen Sie die Umgebung einrichten, um sicherzustellen, dass das Steuerelement erfolgreich aufgerufen wurde.
  1. Klicken Sie auf Start, klicken Sie auf Ausführen, geben Sie Notepadund klicken Sie dann auf
    OK.
  2. Fügen Sie im Editor den folgenden Code ein:
    <OBJECT id="MyWinControl1" height="200" width="200" classid="http:UserControl.dll#UserControl.UserControl1" VIEWASTEXT>    
    </OBJECT>
  3. Im Stammordner des Microsoft-Internetinformationsdienste (IIS) speichern Sie die Datei als CallUserControl.htm.
  4. Kopieren Sie die Datei UserControl.dll, die im Abschnitt "Erstellen ein Windows-Benutzersteuerelement mit Microsoft Visual C# .NET oder Microsoft Visual C# 2005 höher" IIS-Stammverzeichnis erstellt.
  5. Öffnen Sie Microsoft Internet Explorer.
  6. Geben Sie im Feld Adresse
    http://localhost/CallUserControl.htm, und drücken Sie dann die EINGABETASTE. Das Dialogfeld Öffnen wird angezeigt.
  7. Suchen Sie eine beliebige Textdatei, und klicken Sie dann auf Öffnen. Der Text der Datei wird im ListBox -Steuerelement im Browser.
zurück zum Anfang

Referenzen

Weitere Informationen finden Sie auf folgenden Websites von Microsoft Developer Network (MSDN):
Konfigurieren von Codegruppen mit dem.NET Framework-Konfigurationstool
http://msdn2.microsoft.com/en-us/library/eb8xw74a(vs.71).aspx

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

.NET Framework-Assemblys und das AllowPartiallyTrustedCallers-Attribut
http://msdn2.microsoft.com/en-us/library/aa302328.aspx

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

Assembly-Sicherheitsaspekte
http://msdn2.microsoft.com/en-us/library/ab4eace3(vs.71).aspx

Security Briefs: starke Namen und Sicherheit im.NET Framework

http://msdn2.microsoft.com/en-us/library/aa302416.aspx
zurück zum Anfang
Eigenschaften

Artikelnummer: 839300 – Letzte Überarbeitung: 16.01.2017 – Revision: 1

Feedback