Pergunta

Quero testar o comportamento de um determinado trecho de código .NET em ambientes de confiança parcial.Qual é a maneira mais rápida de configurar isso?Sinta-se à vontade para presumir que eu (e outros leitores) somos totalmente novatos em CAS.

@Usuario:Obrigado pela resposta.Infelizmente, a ferramenta em questão é explicitamente para código não gerenciado.Eu não disse "gerenciado" na minha pergunta e não deveria ter presumido que as pessoas iriam inferir isso da tag ".NET".

Foi útil?

Solução

Esta é uma excelente pergunta, especialmente do ponto de vista do TDD e da validação de código em diferentes cenários de confiança.

Acho que a maneira como eu abordaria isso seria algo como -

  • Crie um AppDomain em meu código TDD usando a sobrecarga AppDomain.CreateDomain() que permite passar um PermissionSet.O PermissionSet seria construído para corresponder aos diferentes cenários de confiança que você deseja testar.

  • Carregue o assembly que contém a lógica em teste no domínio do aplicativo

  • Crie instâncias de tipos/métodos de chamada, etc. no domínio do aplicativo, intercepte exceções de segurança

Algo mais ou menos assim.Ainda não tive tempo de elaborar uma prova de conceito.

Outras dicas

A funcionalidade que você procura está integrada ao visual studio:

Na guia de segurança do seu projeto, há um botão "Avançado ..." que permite configurar se deseja depurar com confiança total ou em um nível de confiança especificado.

Use o Verificador de aplicativos Microsoft.

AppVerifier ajuda a determinar:

  • Quando o aplicativo está usando APIs corretamente:(APIs TerminateThread inseguras., Uso correto de APIs Thread Local Storage (TLS)., o Uso correto de manipulações de espaço virtual (por exemplo, VirtualAlloc, MapViewOfFile).
  • Se o aplicativo está ocultando violações de acesso usando tratamento estruturado de exceções.
  • Se o aplicativo está tentando usar identificadores inválidos.
  • Se há corrupções de memória ou problemas na pilha.
  • Se o aplicativo fica sem memória com poucos recursos.
  • Se está ocorrendo o uso correto das seções críticas.
  • Se um aplicativo executado em um ambiente administrativo funcionará bem em um ambiente com menos privilégios.
  • Se há possíveis problemas quando o aplicativo está sendo executado como usuário limitado.
  • Se existem variáveis ​​não inicializadas em futuras chamadas de função no contexto de um thread.

Você deve consultar a ferramenta de configuração do .NET Framework.Está no SDK do .NET e você pode encontrar instruções sobre como executá-lo aqui...http://msdn.microsoft.com/en-us/library/2bc0cxhc.aspx

No Política de segurança de tempo de execução seção você encontrará três níveis de política:Empresa, Máquina e Usuário.Se você detalhar Máquina ou Usuário, encontrará definições de Grupos de códigos e Conjuntos de permissões .Quando você diz que deseja testar algum código .NET em ambientes de confiança parcial, acho que deseja testar um dos conjuntos de permissões padrão já definidos, como Internet .Você precisa definir um Grupo de códigos que corresponda ao seu aplicativo (ou assemblies específicos) e atribua o conjunto de permissões escolhido a esse Grupo de códigos .

Você pode definir seu próprio costume Conjuntos de permissões também, mas vamos manter as coisas simples por enquanto.

Escolha se deseja que seu novo grupo de códigos exista no escopo de toda a máquina ou apenas para sua conta de usuário e faça uma busca detalhada no nível de política Máquina ou Usuário adequadamente.Você verá um grupo de códigos chamado _All _ Code_ .Crie um grupo de códigos filho dentro dele, clicando com o botão direito e selecionando Novo...

Dê um nome, diga Grupo de confiança parcial , então clique Próximo .

Você deve especificar uma condição de associação para este grupo e existem vários tipos.Eu gosto de criar uma pasta específica chamada Confiança Parcial na minha máquina e, em seguida, crie uma condição de associação de URL correspondente.Então, meu URL fica assim ...arquivo://c:/users/martin/documents/partialtrust/*

O * é um curinga para capturar qualquer assembly abaixo desse caminho.Clique Próximo .

Agora você pode escolher um conjunto de permissões para seu novo grupo de códigos.Por enquanto, escolha Internet .É um conjunto bastante restritivo, semelhante a uma sandbox de miniaplicativos Java.Clique Próximo e Terminar .

Agora clique com o botão direito em seu novo grupo de códigos e selecione Propriedades.Na guia Geral, certifique-se de que a caixa de seleção superior esteja marcada e clique em OK.

Agora, qualquer assemblie .NET carregado de um local abaixo da URL especificada terá o Internet conjunto de permissões aplicado a eles.Espere obter algumas SecurityExceptions se você não tiver escrito seu código para observar cuidadosamente o conjunto de permissões reduzido.

Desculpe, esta é uma descrição longa.Realmente é muito mais simples do que parece.

Acabei de postar um artigo intitulado Teste de confiança parcial com xUnit.net no meu blog.Ele detalha a estrutura baseada em xUnit.net que usamos na equipe do Entity Framework para exercitar o código sob confiança média.

Aqui está um exemplo de seu uso.

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
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top