Domanda

immaginate il seguente ambiente:un XBAP applicazione in esecuzione in modalità di attendibilità parziale (comportamento di default;che richiedono la Piena Fiducia, non è un'opzione, ma prima di chiedere, se la fiducia è dato per l'applicazione XBAP, tutto funziona come previsto) riferimento a un'installazione locale di assemblea, che si trova nella global assembly cache.Per ottenere questo, abbiamo attivato il "AllowPartiallyTrustedCallers"l'opzione per l'assemblaggio locale, e anche piena di fiducia è concesso.(immagino che questo sia un qualche tipo di connettività locale controparte)

(a proposito, siamo consapevoli degli aspetti di sicurezza di utilizzare l'attributo AllowPartiallyTrustedCallers, questo è fuori del campo di applicazione di questo post, però, non interessa)

Ora, anche se il nostro locale GAC assemblea ha piena fiducia (siamo in grado di controllare questa chiamando Assembly.GetExecutingAssembly().IsFullyTrusted in qualsiasi momento), riuscirà a qualsiasi domanda (implicita o esplicita), poiché è chiamato da un parzialmente attendibile chiamante (la nostra applicazione XBAP). (mi corregga se sto fraintendendo qualcosa).Per fortuna, siamo in grado di fare esplicito afferma per ottenere le autorizzazioni all'interno del nostro locale GAC gruppo, per esempio:

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

Con questo si può impedire che un full stack piedi a seconda delle esigenze ed è proprio in questo punto e fare qualsiasi accesso ai file come si desidera.(di nuovo, per favore mi corregga...) Questo in realtà funziona perfettamente! (in questo caso)

Il problema è che non si possono fare qualsiasi file IO, infatti ci stanno chiamando le librerie esterne che dovrebbe essere in grado di fare quello che vogliono (e si potrebbe fare un sacco di cose, l'accesso al registro di sistema, rendendo le richieste di servizio web, la scrittura di file, chiamata in codice non gestito - in dettaglio, non lo sappiamo, ma possiamo fidarci di loro), e di evitare che la domanda di stack a piedi per raggiungere il nostro parzialmente attendibile chiamante.Si dovrebbe essere in grado di raggiungere questo obiettivo, dal momento che tutto è fatto dalla nostra installato in locale e di fiducia GAC assemblea.(di nuovo, si prega di non preoccuparsi degli aspetti di sicurezza qui, assumere solo, che siamo in grado di fiducia del cliente)

Approccio per risolvere questo problema:

  • Che cosa abbiamo pensato prima, era in difesa di una serie di autorizzazioni (PermissionSet) per quasi qualsiasi autorizzazione prima di lavorare con la libreria esterna.Questo funziona quasi, ma sembra che a un certo punto ancora un'eccezione di sicurezza si verifica -, in quanto la libreria esterna potrebbe iniziare più thread che vengono a mancare per qualche motivo, o perché il suo accesso al entryassembly - in realtà, non sappiamo.

  • In secondo luogo, abbiamo provato le seguenti ttribute

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

non ha funzionato neanche.

  • Terzo, abbiamo pensato di aprire un nuovo dominio di applicazione, rendendo completamente attendibile GAC assemblea Appdomain punto di ingresso, e di eseguire qualsiasi cosa all'interno di questo dominio di applicazione - ogni stack piedi non potrà mai raggiungere il parzialmente attendibile chiamante in più - in teoria).Purtroppo, non siamo in grado di ottenere questo...O di nuova creazione del dominio di applicazione non riesce nemmeno più richieste, anche se impostato per l'esecuzione in "risorse del Computer" zone di protezione delle Prove o senza restrizioni SecurityPermission.Io non sono in grado di concedere esplicitamente la piena fiducia a tutto il dominio di applicazione.

  • Il quarto posto caspol non è un'opzione.(a causa della distribuzione motivi)

Ora, dal momento che questo dovrebbe essere un sacco di informazioni, spero che tu capisca quello che si desidera archiviare.

Per arrivare a questo punto: Come può un assembly completamente attendibile affermare una completa fiducia per le assemblee si chiama, l'arresto di tutte le stack di passeggiate per raggiungere l'parzialmente attendibile chiamante?

molte Grazie in Anticipo

È stato utile?

Soluzione

Guardando la documentazione da Microsoft in merito all'autorizzazione Parzialmente Attendibile ai Chiamanti di Piena Fiducia Assemblee Non credo che questo sarà possibile fare.

Mantenere sottolineando che dobbiamo evitare i problemi di sicurezza, ma in realtà, ciò che si sta cercando di fare con la tua soluzione è ignorare essenzialmente ogni singola parte del codice di accesso di sicurezza del sistema .NET Framework, e mi è difficile credere che si sta andando ad essere in grado di ottenere una soluzione praticabile.

In cima a questo, non riesco a immaginare che questo processo è qualcosa che ha davvero bisogno di essere fatto in questo modo.

Non è che puoi offload questo trattamento, parzialmente attendibile chiamante per poi passare comunicazioni per qualcosa in esecuzione a livello locale e già attendibile?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top