Frage

Ich möchte das Verhalten eines bestimmten Teils des .NET-Codes in teilweise vertrauenswürdigen Umgebungen testen.Wie lässt sich das am schnellsten einrichten?Man kann ruhig davon ausgehen, dass ich (und andere Leser) absolute CAS-Neulinge sind.

@Nick:Danke für die Antwort.Leider ist das betreffende Tool explizit für nicht verwalteten Code gedacht.Ich habe in meiner Frage nicht „verwaltet“ gesagt und hätte nicht davon ausgehen dürfen, dass die Leute es aus dem „.NET“-Tag ableiten würden.

War es hilfreich?

Lösung

Dies ist eine ausgezeichnete Frage, insbesondere aus TDD-Sicht und der Validierung von Code unter verschiedenen Vertrauensszenarien.

Ich denke, die Art und Weise, wie ich das angehen würde, wäre ungefähr so:

  • Erstellen Sie eine AppDomain in meinem TDD-Code mit der Überladung AppDomain.CreateDomain(), die Ihnen die Übergabe eines PermissionSet ermöglicht.Das PermissionSet wird so erstellt, dass es den verschiedenen Vertrauensszenarien entspricht, anhand derer Sie testen möchten.

  • Laden Sie die Assembly, die die zu testende Logik enthält, in die App-Domäne

  • Erstellen Sie Instanzen von Typen/Aufrufmethoden usw. in der App-Domäne und fangen Sie Sicherheitsausnahmen ab

So etwas in der Art.Ich hatte noch keine Zeit, einen Proof of Concept zu erstellen.

Andere Tipps

Die von Ihnen gesuchte Funktionalität ist in Visual Studio integriert:

Auf der Registerkarte „Sicherheit“ Ihres Projekts gibt es die Schaltfläche „Erweitert ...“, mit der Sie konfigurieren können, ob Sie das Debugging in voller Vertrauenswürdigkeit oder auf einer bestimmten Vertrauensstufe durchführen möchten.

Benutzen Sie die Microsoft Application Verifier.

AppVerifier hilft bei der Bestimmung:

  • Wenn die Anwendung APIs korrekt verwendet:(Unsichere TerminateThread-APIs., Korrekte Verwendung von Thread Local Storage (TLS)-APIs., o Korrekte Verwendung von Manipulationen des virtuellen Raums (z. B. VirtualAlloc, MapViewOfFile).
  • Ob die Anwendung Zugriffsverletzungen mithilfe einer strukturierten Ausnahmebehandlung verbirgt.
  • Ob die Anwendung versucht, ungültige Handles zu verwenden.
  • Ob es Speicherbeschädigungen oder Probleme im Heap gibt.
  • Ob der Anwendung bei geringen Ressourcen nicht mehr genügend Arbeitsspeicher zur Verfügung steht.
  • Ob die korrekte Verwendung kritischer Abschnitte erfolgt.
  • Ob eine Anwendung, die in einer Verwaltungsumgebung ausgeführt wird, in einer Umgebung mit weniger Berechtigungen gut ausgeführt werden kann.
  • Gibt es potenzielle Probleme, wenn die Anwendung als eingeschränkter Benutzer ausgeführt wird?
  • Ob in zukünftigen Funktionsaufrufen im Kontext eines Threads nicht initialisierte Variablen vorhanden sind.

Sie sollten sich das .NET Framework-Konfigurationstool ansehen.Es ist im .NET SDK enthalten und Anweisungen zur Ausführung finden Sie hier ...http://msdn.microsoft.com/en-us/library/2bc0cxhc.aspx

Im Laufzeitsicherheitsrichtlinie Im Abschnitt finden Sie drei Richtlinienebenen:Unternehmen, Maschine und Benutzer.Wenn Sie sich „Maschine“ oder „Benutzer“ genauer ansehen, finden Sie Definitionen von Codegruppen Und Berechtigungssätze .Wenn Sie sagen, dass Sie .NET-Code in teilweise vertrauenswürdigen Umgebungen testen möchten, möchten Sie wahrscheinlich einen der bereits definierten Standardberechtigungssätze testen, z Internet .Sie müssen a definieren Codegruppe das zu Ihrer App (oder bestimmten Assemblys) passt, und weisen Sie dieser den von Ihnen gewählten Berechtigungssatz zu Codegruppe .

Sie können Ihren eigenen Benutzerdefiniert definieren Berechtigungssätze auch, aber lassen Sie es uns vorerst einfach halten.

Wählen Sie aus, ob Ihre neue Codegruppe maschinenweit oder nur für Ihr Benutzerkonto vorhanden sein soll, und gehen Sie entsprechend auf die Maschinen- oder Benutzerrichtlinienebene ein.Sie sehen eine Codegruppe namens _All _ Code_ .Erstellen Sie darin eine untergeordnete Codegruppe, indem Sie mit der rechten Maustaste klicken und auswählen Neu...

Geben Sie ihm beispielsweise einen Namen PartielleTrustGroup , dann klick Nächste .

Für diese Gruppe müssen Sie eine Mitgliedschaftsbedingung angeben. Es gibt verschiedene Arten.Ich erstelle gerne einen bestimmten Ordner mit dem Namen Partielles Vertrauen auf meinem Computer und erstellen Sie dann eine entsprechende URL-Mitgliedschaftsbedingung.Meine URL sieht also so aus ...file://c:/users/martin/documents/partialtrust/*

Das * ist ein Platzhalter zum Abfangen aller Assemblys unter diesem Pfad.Klicken Nächste .

Jetzt können Sie einen Berechtigungssatz für Ihre neue Codegruppe auswählen.Wählen Sie zunächst aus Internet .Es handelt sich um einen recht restriktiven Satz, ähnlich einer Java-Applet-Sandbox.Klicken Nächste Und Beenden .

Klicken Sie nun mit der rechten Maustaste auf Ihre neue Codegruppe und wählen Sie Eigenschaften.Stellen Sie sicher, dass auf der Registerkarte „Allgemein“ das oberste Kontrollkästchen aktiviert ist, und klicken Sie dann auf „OK“.

Jetzt verfügen alle .NET-Assemblys, die von einem Speicherort unterhalb der von Ihnen angegebenen URL geladen werden, über die Internet der auf sie angewendete Berechtigungssatz.Erwarten Sie einige SecurityExceptions, wenn Sie Ihren Code nicht so geschrieben haben, dass er den reduzierten Berechtigungssatz sorgfältig beachtet.

Entschuldigung, das ist eine lange Beschreibung.Es ist wirklich viel einfacher, als es sich anhört.

Ich habe gerade einen Artikel mit dem Titel gepostet Teilweise Vertrauensprüfung mit xUnit.net auf meinem Blog.Es beschreibt das xUnit.net-basierte Framework, das wir im Entity Framework-Team verwenden, um Code mit mittlerer Vertrauenswürdigkeit auszuführen.

Hier ist ein Beispiel für seine Verwendung.

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
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top