Frage

vorstellen, die folgende Umgebung: eine XBAP Anwendung in teilweise vertrauenswürdigem Modus (Standardverhalten ausgeführt wird; Volles Vertrauen erfordert, ist keine Option - aber bevor Sie fragen, , wenn volles Vertrauen in die XBAP gegeben wird, alles funktioniert wie erwartet ) verweist auf eine lokal Baugruppe installiert, die im GAC befindet. Um dies zu erreichen, ermöglichen wir die „AllowPartiallyTrustedCallers“ Option auf die lokale Montage und auch volles Vertrauen gewährt. (Man stelle sich dies ist eine Art von lokalen Konnektivität Gegenstück)

(von der Art, wie wir wissen um die Sicherheitsaspekte sind das AllowPartiallyTrustedCallers Attribut zu verwenden, das ist außerhalb des Geltungsbereichs dieses Postens aber einfach egal)

Nun, auch wenn unsere lokalen GAC hat Montage volles Vertrauen (wir können dies überprüfen, indem Assembly.GetExecutingAssembly().IsFullyTrusted jederzeit anrufen), es werden alle Anforderungen scheitern (implizit oder explizit), da es durch eine teilweise genannt vertrauenswürdiger Anrufer (unser XBAP). (korrigieren Sie mich, wenn ich etwas Missverständnis) . Fortunatelly können wir explizit tun behauptet Montage Berechtigungen innerhalb unseres lokalen GAC zu gewinnen, zum Beispiel:

new System.Security.Permissions.FileIOPermission(.....).Assert();

Damit können wir einen vollen Stapel zu Fuß auf Forderungen direkt an dieser Stelle verhindern und jeden Dateizugriff tun, wie wir wollen. (Wieder, bitte korrigieren Sie mich ...) Das tatsächlich funktioniert perfekt! (in diesem Fall)

Das Problem ist, tun wir gerade keine Datei IO in der Tat fordern wir externe Bibliotheken , die in der Lage sein sollte nicht, was sie wollen (und sie könnte eine Menge Sachen tun, die Registrierung Zugriff auf Web-Service-Anfragen machen, write-Dateien, rufen sie nicht verwalteten Code - im Detail wissen wir nicht, aber wir können ihnen) vertrauen, und verhindert, dass der Nachfrage Stapel zu Fuß zu unserem teilweise vertrauenswürdigen Anrufer zu erreichen . Wir sollten diese in der Lage zu erreichen sein, da alles Montag von unserem lokal installiert und vertrauenswürdigen GAC erfolgt. (Wieder, bitte kümmern sich nicht um Sicherheitsaspekte hier einfach mal davon aus, dass wir den Kunden vertrauen können)

Ansatz dieses Problem zu lösen:

  • Was wir dachten, der erste wurde eine Reihe von Berechtigungen (PermissionSet) auf fast jede Erlaubnis zu behaupten, bevor sie mit der externen Bibliothek zu arbeiten. Diese fast funktioniert, aber es sieht aus wie irgendwann noch eine Sicherheitsausnahme auftritt - entweder, weil die externe Bibliothek kann mehrere Threads starten, die aus irgendeinem Grunde ausfallen, oder weil sie die entryassembly Zugriff -. In der Tat, wir wissen nicht,

  • Zweitens haben wir versucht, die folgend ttribute

[System.Security.Permissions.PermissionSet(
  System.Security.Permissions.SecurityAction.Assert, Name = "FullTrust")]

es hat nicht funktioniert.

  • Drittens, dachten wir, eine neue AppDomain öffnen, so dass die GAC vollständig Montage des AppDomains Einspeisepunkt vertraut, und alles, was in diesem Appdomain liefen - jeder Stapel laufen konnte nie mehr den teilweise vertrauenswürdigen Anrufer erreichen - in unserer Theorie) . Leider können wir dies achive nicht in der Lage ... oder neu erstellt AppDomain nicht noch mehr Anforderungen, auch wenn die im Rahmen „MyComputer“ Sicherheitszonen Evidence oder uneingeschränkten Security laufen. Ich bin ausdrücklich nicht in der Lage voll Vertrauen auf die gesamte AppDomain zu gewähren.

  • Viertens mit caspol ist keine Option. (Aufgrund der Bereitstellung Gründen)

Nun, da dies eine Menge Informationen sein sollte, ich hoffe, Sie verstehen, was wir archivieren möchten.

Um dies auf den Punkt: Wie kann eine völlig Versammlung assert ein komplettes volles Vertrauen zu trauen Baugruppen es nennt, alle Stapel zu stoppen geht den teilweise vertrauenswürdigen Anrufer zu erreichen

Vielen Dank im voraus

War es hilfreich?

Lösung

Mit Blick auf der Dokumentation von Microsoft in Bezug auf die damit teilweise vertrauenswürdigen Anrufer auf Full Vertrauen Baugruppen ich glaube nicht, dass dies sein wird, möglich zu machen.

Sie halten betonen, dass wir die Sicherheitsbedenken vermeiden müssen, aber in aller Wirklichkeit, was Sie versuchen, mit Ihrer Lösung zu tun ist, Bypass im wesentlichen jeder einzelne Teil des Codezugriffssicherheitssystem innerhalb des .NET Framework, und ich‘ ll schwer tun, zu glauben, dass Sie eine tragfähige Lösung erhalten gehen zu können.

Auf dieses kann ich mir nicht vorstellen, dass dieser Prozess etwas ist, dass wirklich auf diese Weise getan werden muss.

Könnten Sie nicht abladen diese Verarbeitung von dem Anrufer teilweise vertraut dann Kommunikation etwas abgehen lokal ausgeführt und bereits vertraut?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top