ASP.NET unterschiedliche Vertrauensstufe pro Seite durch Assembly?

8

Ich habe zwei Webanwendungen (vorkompilierte Websites), eine davon ist first-party und wird mit voller Vertrauenswürdigkeit ausgeführt. Ein anderer ist ein Drittanbieter und sollte teilweise vertrauenswürdig sein (oder mit bestimmten Berechtigungen).

TrustedAssembly.Web.Pages.MyPage sollte in der vollständigen Trust-Standardanwendungsdomäne ausgeführt werden. UntrustedAssembly.Web.Pages.SomePage sollte in einer AppDomain mit Teilvertrauensstellung ausgeführt werden.

Außerdem, wenn TrustedAssembly.Web.Pages.MyPage UntrustedAssembly.Web.Controls.SomeControl dynamisch lädt, ist es möglich, das Steuerelement teilweise vertrauenswürdig und / oder mit bestimmten Berechtigungen auszuführen, während die Seite unter voller Vertrauenswürdigkeit ausgeführt wird?

Und umgekehrt, z.B. UntrustedAssembly.Web.Controls.SomePage lädt TrustedAssembly.Web.Controls.MyControl dynamisch, ist es möglich, das Steuerelement vollständig vertrauenswürdig auszuführen, während die Seite unter teilweiser Vertrauenswürdigkeit ausgeführt wird?

Update / FYI: Das ist .NET 4

    
lukiffer 16.06.2011, 19:21
quelle

2 Antworten

5

Dies ist wahrscheinlich ein bisschen schwierig. Hier sind zwei mögliche Gedankengänge:

Der erste Schritt besteht darin, die App in der mittleren Vertrauensstellung auszuführen, aber alles, was Sie ausführen möchten, vollständig in den GAC zu vertrauen, und was Sie teilweise in bon verwalten möchten.

Beachten Sie, dass das vertrauenswürdige Steuerelement in Ihrem "Umgekehrt" -Szenario möglicherweise eine Sicherheitsaktivierung ausführen muss, bevor Sie vollständige Vertrauensoperationen ausführen können. z.B.

%Vor%

Der zweite Gedankengang besteht darin, die App in voller Vertrauenswürdigkeit auszuführen, aber dann eine beliebige Assembly, die Sie ausführen möchten, unter Verwendung einer benutzerdefinierten Evidence . z.B.

%Vor%

Aber seien Sie sich bewusst, dass die korrekte Einrichtung des Beweisobjekts nichts für schwache Nerven ist, und ich bin mir nicht sicher, ob ich diesen Weg gehen würde.

Keine vollständige Antwort, aber hoffentlich einige Ideen, die zu einem führen können:)

    
David Ebbo 19.06.2011, 02:59
quelle
3

+1 zu David Ebbo - das Ausführen einer ganzen App unter teilweiser Vertrauenswürdigkeit und Erhöhen für Aufrufe von GACed-Assembly ist nur ein vernünftiger Ansatz.

Noch ein paar Punkte zum Nachdenken ...

  • Nicht viele Klassen sind so konzipiert, dass sie zwischen AppDomains verschoben werden können. ASP.Net sind nicht sehr remotable ...
  • ASP.Net-Steuerelemente haben sehr viele Integrationspunkte mit der Laufzeit. Sie müssen sehr interessante Proxy-Klassen erstellen, um die Interaktionen zwischen Steuerelementen und Laufzeit ordnungsgemäß einzuschränken, um potenzielle Erweiterungen zu vermeiden und das korrekte domainübergreifende Marshalling zu gewährleisten.
  • es ist leicht, Klassen aus anderen Assemblies über Domänengrenzen hinweg zu "lecken" (das benutzerdefinierte Laden von benutzerdefinierten Speicherorten hilft, "Lecks" zu vermeiden, indem Fehler offensichtlicher gemacht werden). Die Verwendung von Frameworks mit vielen Eentension Points (Overrides, Events) wie ASP.Net bietet mehr Möglichkeiten, Objekte über Domains hinweg zu bringen.
  • Dies wird Ihnen nicht dabei helfen, beliebigen Code in Ihrem Prozess laufen zu lassen - Sie deklarieren eine Vertrauensstellung (kein CLR-Sinn) zu benutzerdefiniertem Code, indem Sie einfach in Ihren Prozess laden. I.e. StackOverflow ist durch Code ausführbar, der nur Ausführungsberechtigungen hat und den Prozess rela- tiv bringt.
Alexei Levenkov 24.06.2011 06:28
quelle