Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês
Esta documentação foi arquivada e não está sendo atualizada.

Código de segurança transparente

Transparência, um novo recurso do .NET estrutura versão 2.0, ajuda os desenvolvedores escrever bibliotecas do .NET estrutura mais seguras que expõem a funcionalidade do código parcialmente confiável. Você pode marcar um sembly sistema autônomo todo, alguns clsistema autônomoses em um sembly sistema autônomo ou alguns métodos em um clsistema autônomos sistema autônomo segurança transparente. Código de segurança transparente não é possível elevar privilégios. Essa restrição tem três ramificações específicas:

  • Código de segurança transparente não é possível executar declarações.

  • Nenhuma demanda de link que poderia ser atendida pelo código transparente de segurança se torna uma demanda completa.

  • Qualquer código não seguro (não verificado) que deve ser executado no código transparente de segurança faz com que uma demanda para a permissão de segurança Ignorar verificação completa.

Essas regras são aplicadas durante a execução do common linguagem tempo de execução (CLR). Código de segurança transparente passa todos os requisitos de segurança do código, que ele chama de volta para os chamadores. As demandas que fluem através do código de segurança transparente não é possível elevar privilégios. Se um aplicativo de baixa confiança chama o código de segurança transparente e faz com que uma demanda de alto privilégio, a demanda irá fluir volta para o código de baixa confiança e falhar. O código de segurança transparente não é possível parar a demanda porque não é possível executar declarações. O mesmo código de segurança transparente chamado a partir de código de confiança total resultados em uma demanda bem-sucedida.

Você precisa aplicar transparência explicitamente. Ao usar transparência, você separa o código em segurança transparente e crítico de segurança (o oposto de segurança transparente) métodos. A maior parte do seu código que manipula a lógica de manipulação de dados e normalmente pode ser marcada sistema autônomo segurança transparente, ao passo que a menor quantidade de código que executa sistema autônomo elevações de privilégios está marcada sistema autônomo crítica de segurança. Você poderá marcar aproximadamente 80 % do seu código sistema autônomo segurança transparente. Isso permitirá que você se concentre auditoria e esforços nos 20 % do seu código é crítico de segurança de teste.

Para compatibilidade com versões anteriores do .NET estrutura, todos os códigos que não é anotado com atributos de transparência é considerado crítica de segurança. Não há nenhuma regra de análise de código para validar a transparência. Portanto, talvez você precise depurar erros de transparência em tempo de execução.

A tabela a seguir descreve os três atributos que você usa para fazer anotações em seu código para transparência.

Atributo

Descrição

SecurityTransparentAttribute

Permitido somente no nível do assembly. Identifica todos sistema autônomo tipos no assembly sistema autônomo segurança transparente. O assembly não pode conter qualquer código de segurança crítico.

SecurityCriticalAttribute

Quando usado no nível do assembly, identifica todo o código no assembly sistema autônomo segurança transparente por padrão, mas indica que o assembly pode conter código crítico de segurança.

Quando usado no nível de classe ou método, identifica a classe ou método sistema autônomo crítica de segurança. A classe ou método identificados sistema autônomo críticos de segurança pode executar sistema autônomo elevações do privilégio.

SecurityTreatAsSafeAttribute

Pode ser aplicado a particular ou internos membros essenciais de segurança a fim de permitir código segurança transparente no conjunto para acesso esses membros. Caso contrário, o código segurança transparente não é possível acesso particular ou internos membros essenciais de segurança no mesmo conjunto de módulos (assembly). Isso poderia influenciar o código de segurança crítico e que elevações inesperadas de privilégios possível.

The SecurityTreatAsSafeAttribute atributo permite que o código de segurança transparente acesso membros essenciais de segurança no mesmo conjunto de módulos (assembly). Considere o código de segurança transparente e crítico de segurança no seu assembly sistema autônomo separadas em dois assemblies. O código de segurança transparente não poderá ver o particular ou membros internos do código de segurança crítico. Além disso, o código de segurança crítico geralmente é auditado para acesso à sua interface pública. Você não espera que um estado particular ou internal para ser acessível fora do assembly; você deve manter o estado isolado. The SecurityTreatAsSafeAttribute atributo mantém o isolamento de estado entre o código de segurança transparente e crítico de segurança, fornecendo a capacidade de substituir o isolamento quando for necessário. Código transparente de segurança não pode acessar membros privados ou internos de código de segurança crítico, a menos que os membros foram marcados com SecurityTreatAsSafeAttribute. Antes de aplicar o SecurityTreatAsSafeAttribute, esse membro de auditoria sistema autônomo se foram publicamente exposto.

Se desejar tornar um assembly inteiro transparente para indicar que o assembly não contém qualquer código crítico e não elevar os privilégios de qualquer maneira, você pode adicionar transparência explicitamente ao conjunto de módulos (assembly) com o atributo a seguir:

 [assembly: SecurityTransparent]

Se você deseja mixar código crítico e transparente no mesmo assembly, inicie, marcando o assembly com o SecurityCriticalAttribute atributo para indicar que o assembly pode conter código crítico, da seguinte maneira:

 [assembly: SecurityCritical]

Se você quiser executar ações de segurança críticas, você deve marcar explicitamente o código que executará a ação crítica com outro SecurityCriticalAttribute atributo, sistema autônomo neste exemplo de código a seguir:

 [assembly: SecurityCritical]
Public class A
{
    [SecurityCritical]
    public void Critical()
    {
        // critical
    }

    public int SomeProperty
    {
        get {/* transparent */ }
        set {/* transparent */ }
    }
}
public class B
{    
    internal string SomeOtherProperty
    {
        get { /* transparent */ }
        set { /* transparent */ }
    }
}

O código anterior é transparente, exceto para o Critical método, que é explicitamente marcado sistema autônomo crítico de segurança. Transparência está é a configuração padrão, mesmo com o nível de assembly SecurityCriticalAttribute atributo.

Mostrar: