Domanda

Ho due applicazioni Web (siti pre-condizionati), una è la prima parte e funzionerà a pieno titolo. Un altro è di terze parti e dovrebbe essere eseguito alla fiducia parziale (o con autorizzazioni specifiche).

TrustedAssembly.Web.Pages.MyPage dovrebbe essere eseguito nell'appdomain predefinito di fiducia completa.UntrustedAssembly.Web.Pages.SomePage dovrebbe essere eseguito in un APPDomain di fiducia parziale.

Inoltre, se TrustedAssembly.Web.Pages.MyPage Carica dinamicamente UntrustedAssembly.Web.Controls.SomeControl È possibile eseguire il controllo in una fiducia parziale e/o con autorizzazioni specifiche, mentre la pagina funziona sotto la fiducia completa?

E viceversa, ad esempio UntrustedAssembly.Web.Controls.SomePage Carica dinamicamente TrustedAssembly.Web.Controls.MyControl, è possibile eseguire il controllo in piena fiducia mentre la pagina funziona sotto una fiducia parziale?

Aggiornamento/FYI: questo è .NET 4

È stato utile?

Soluzione

In questo modo è probabile che sia un po 'complicato. Ecco due possibili linee di pensiero:

Il primo è quello di eseguire l'app in media fiducia, ma di posizionare tutto ciò che vuoi correre in piena fiducia nel GAC e ciò che vuoi correre in una fiducia parziale nel bidone.

Si noti che nello scenario "viceversa", il controllo affidabile potrebbe essere necessario eseguire un "asserzione" di sicurezza prima di poter eseguire operazioni di fiducia completa. per esempio

(new SecurityPermission(SecurityPermissionFlag.UnmanagedCode)).Assert();

La seconda riga di pensiero è quella di eseguire l'app in piena fiducia, ma quindi caricare qualsiasi assieme che si desidera eseguire in media fiducia utilizzando un'usanza Evidenza. per esempio

var evidence = new Evidence();
// Initialize the Evidence
Assembly.LoadFrom(path, evidence);

Ma tieni presente che la configurazione corretta dell'oggetto prove non è per i deboli di cuore, e non sono sicuro che andrei a fare quel percorso.

Non è una risposta completa, ma spero che alcune idee che possano portarne una :)

Altri suggerimenti

+1 A David Ebbo - L'esecuzione di interi app con una fiducia parziale ed elevare per le chiamate dall'assemblaggio GACED è solo un approccio sano.

Alcuni altri punti a cui pensare ...

  • Non molte classi sono progettate per essere remote tra appdomain. Gli asp.net non sono molto remoti ...
  • I controlli ASP.NET hanno molti punti di integrazione con il runtime. Dovrai costruire classi di proxy molto interessanti per limitare correttamente le interazioni tra controlli e runtime per evitare potenziali elevazioni e avere un corretto marshalling a dominio.
  • È facile "perdere" classi da altri assemblaggi attraverso i confini del dominio (il caricamento personalizzato dalla posizione personalizzata aiuta a prevenire "perdite" rendendo più evidenti i guasti). L'uso di Framework con molti punti Etensions (sovrascrivi, eventi) come ASP.NET dà più possibilità di portare oggetti Cross Domain.
  • Ciò non ti aiuterà a eseguire codice arbitrario nel processo: dichiari la fiducia (non clr) al codice personalizzato semplicemente caricando nel processo. IE StackOverflow è attivabile in base al codice che ha appena eseguito le autorizzazioni e ridurrà in modo corretto il processo.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top