2012-06-07 1 views
6

Ho un .net assembly con un metodo che non è verificabile.C# codice non verificabile senza autorizzazione non gestita

Sto provando a caricare questo assembly in un appdomain sandbox.

Se carico con skip verifica, ma non con Unmanaged ottengo un'eccezione di verifica. In questo modo:

new SecurityPermission(SecurityPermissionFlag.Execution | 
         SecurityPermissionFlag.SkipVerification); 

Se carico con il permesso non gestito funziona, ma poi il dominio applicazione non sarà sufficiente "sandbox".

new SecurityPermission(SecurityPermissionFlag.Execution | 
         SecurityPermissionFlag.SkipVerification | 
         SecurityPermissionFlag.UnmanagedCode); 

Inoltre - Sono in esecuzione .Net 4, e di fare quanto sopra per lavorare ho dovuto passare a transperancy livello di modello 1, in questo modo:

[assembly:SecurityRules(SecurityRuleSet.Level1)] 

Quindi, la mia domanda è:

  1. C'è un modo per eseguire codice non verificato senza autorizzazione UnamangedCode.
  2. C'è un modo per far funzionare quanto sopra con il set di regole di sicurezza Level2.

Grazie!

+0

Un'applicazione è in modalità sandbox o no. Cosa significa esattamente "non sarà abbastanza sandboxed"? Sembra che tu abbia bisogno di ottenere un assembly che sia verificabile invece di provare a creare una soluzione alternativa. –

+0

In questa sandbox ho bisogno di proteggere l'utente da se stesso, e non contro qualche potenziale minaccia. Ecco perché non sono preoccupato del codice non verificabile. Ma sono preoccupato per il codice non gestito. Ad ogni modo, non riesco a ottenerlo verificabile a causa di alcuni framework .net che uso. – ravyoli

risposta

1

Esiste un modo per eseguire codice non verificato senza autorizzazione UnamangedCode .

Anche se ci fosse, avresti rinunciato a qualsiasi sicurezza a quel punto. Il codice non verificabile ha la stessa potenza del codice non gestito. Ad esempio, ti consente di rompere il sistema di tipi.

Non ha senso avere SkipVerification e non UnmanagedCode (o viceversa). I due sono equivalenti e ritengo che sia un bug nel framework che entrambi esistono.