Domanda

Voglio testare il comportamento di un determinato pezzo di codice .NET in ambienti ad attendibilità parziale.Qual è il modo più veloce per configurarlo?Sentiti libero di presumere che io (e altri lettori) siamo dei principianti totali del CAS.

@Nick:Grazie per la risposta.Purtroppo, lo strumento in questione è esplicitamente per codice non gestito.Non ho detto "gestito" nella mia domanda e non avrei dovuto presumere che le persone lo avrebbero dedotto dal tag ".NET".

È stato utile?

Soluzione

Questa è un'ottima domanda, soprattutto dal punto di vista del TDD e della convalida del codice in diversi scenari di fiducia.

Penso che il modo in cui mi avvicinerei a questa cosa sarebbe qualcosa sulla falsariga di...

  • Crea un AppDomain nel mio codice TDD utilizzando l'overload AppDomain.CreateDomain() che ti consente di passare un PermissionSet.Il PermissionSet verrebbe costruito per corrispondere ai diversi scenari di attendibilità su cui vorresti eseguire il test.

  • Caricare l'assembly contenente la logica da testare nel dominio dell'app

  • Crea istanze di tipi/metodi di chiamata ecc. nel dominio dell'app, intercetta le eccezioni di sicurezza

Qualcosa del genere.Non ho ancora avuto il tempo di mettere insieme una prova di concetto.

Altri suggerimenti

La funzionalità che stai cercando è integrata in Visual Studio:

Nella scheda Sicurezza del tuo progetto, c'è un pulsante "Avanzate..." che ti consente di configurare se desideri eseguire il debug in totale attendibilità o su un livello di attendibilità specificato.

Usa il Verificatore di applicazioni Microsoft.

AppVerifier aiuta a determinare:

  • Quando l'applicazione utilizza le API correttamente:(API TerminateThread non sicure., Utilizzo corretto delle API Thread Local Storage (TLS)., o Utilizzo corretto delle manipolazioni dello spazio virtuale (ad esempio, VirtualAlloc, MapViewOfFile).
  • Se l'applicazione nasconde le violazioni di accesso utilizzando la gestione strutturata delle eccezioni.
  • Se l'applicazione sta tentando di utilizzare handle non validi.
  • Se sono presenti danneggiamenti della memoria o problemi nell'heap.
  • Se l'applicazione esaurisce la memoria con risorse scarse.
  • Se si sta verificando l'utilizzo corretto delle sezioni critiche.
  • Se un'applicazione in esecuzione in un ambiente amministrativo funzionerà bene in un ambiente con meno privilegi.
  • Se esistono potenziali problemi quando l'applicazione viene eseguita come utente limitato.
  • Se sono presenti variabili non inizializzate nelle future chiamate di funzione nel contesto di un thread.

Dovresti dare un'occhiata allo strumento di configurazione .NET Framework.Si trova nell'SDK .NET e puoi trovare istruzioni su come eseguirlo qui...http://msdn.microsoft.com/en-us/library/2bc0cxhc.aspx

Nel Politica di sicurezza in fase di esecuzione sezione troverai 3 livelli di policy:Azienda, Macchina e Utente.Se approfondisci Macchina o Utente troverai le definizioni di Gruppi di codici E Insiemi di autorizzazioni .Quando dici che vuoi testare del codice .NET in ambienti con fiducia parziale, immagino che vorrai testare uno dei set di autorizzazioni standard già definiti, come ad esempio Internet .È necessario definire a Gruppo di codici che corrisponde alla tua app (o ad assembly specifici) e assegnagli il set di autorizzazioni scelto Gruppo di codici .

Puoi definire la tua personalizzazione Insiemi di autorizzazioni anche, ma per ora manteniamo le cose semplici.

Scegli se desideri che il tuo nuovo gruppo di codice esista nell'ambito dell'intera macchina o solo per il tuo account utente e approfondisci di conseguenza il livello di policy Macchina o Utente.Vedrai un gruppo di codici chiamato _All _ Code_ .Crea un gruppo di codici figlio all'interno di quello, facendo clic con il tasto destro e selezionando Nuovo...

Dategli un nome, diciamo TrustGroup parziale , quindi fare clic su Prossimo .

È necessario specificare una condizione di appartenenza per questo gruppo e ne esistono di vari tipi.Mi piace creare una cartella specifica chiamata Fiducia parziale sul mio computer, quindi creare una condizione di appartenenza all'URL corrispondente.Quindi, il mio URL è simile a questo...file://c:/users/martin/documents/partialtrust/*

Il * è un carattere jolly per catturare qualsiasi assembly sotto quel percorso.Clic Prossimo .

Ora puoi scegliere un set di autorizzazioni per il tuo nuovo gruppo di codici.Per ora, scegli Internet .È un set piuttosto restrittivo, simile a un sandbox di applet Java.Clic Prossimo E Fine .

Ora fai clic con il pulsante destro del mouse sul nuovo gruppo di codici e seleziona Proprietà.Nella scheda Generale, assicurati che la casella di controllo più in alto sia selezionata, quindi fai clic su OK.

Ora, tutti gli assembly .NET caricati da una posizione sotto l'URL specificato avranno l'estensione .NET Internet set di autorizzazioni applicato.Aspettatevi di ottenere alcune SecurityException se non avete scritto il codice per osservare attentamente il set di autorizzazioni ridotto.

Mi spiace, la descrizione è lunga.È davvero molto più semplice di quanto sembri.

Ho appena pubblicato un articolo intitolato Test di attendibilità parziale con xUnit.net sul mio blog.Descrive in dettaglio il framework basato su xUnit.net che utilizziamo nel team di Entity Framework per esercitare il codice con attendibilità media.

Ecco un esempio del suo utilizzo.

public class SomeTests : MarshalByRefObject
{
    [PartialTrustFact]
    public void Partial_trust_test1()
    {
        // Runs in medium trust
    }
}

// Or...

[PartialTrustFixture]
public class MoreTests : MarshalByRefObject
{
    [Fact]
    public void Another_partial_trust_test()
    {
        // Runs in medium trust
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top