Partilhar via


Código transparente de segurança não deve declarar

TypeName

SecurityTransparentCodeShouldNotAssert

CheckId

CA2128

Category (Categoria)

Microsoft.segurança

Quebrando alterar

Quebrando

Causa

Código que está marcado sistema autônomo SecurityTransparentAttribute não é concedido permissões suficientes para declarar.

Descrição da regra

Esta regra analisa todos os métodos e tipos em um assembly que é um dos 100 % transparente ou mista transparente/crítica e sinaliza qualquer uso declarativo ou imperativo de Assert.

Em time de execução, quaisquer chamadas ao Assert no código transparente fará com que um SecurityException para ser lançada. Isso pode ocorrer em dois assemblies transparente 100 % e também em assemblies transparente/crítica mistos onde um tipo ou método é declarado transparente, mas inclui um Assert declarativa ou imperativa.

The .NET Framework 2.0 introduziu um recurso chamado transparência.Métodos individuais, campos, interfaces, classes e tipos podem ser transparente ou crítico.

Código transparente não é permitido para elevar privilégios de segurança.Portanto, quaisquer permissões concedidas ou exigidos dele automaticamente são passados por meio do código ao domínio do aplicativo host ou chamador.Exemplos de elevações Asserts, LinkDemands, SuppressUnmanagedCode e unsafe código.

Como corrigir violações

Para resolver o problema, ou marcar o código que chama Assert sistema autônomo SecurityCritical ou remover o Assert.

Quando suprimir avisos

Elimina uma mensagem a partir dessa regra.

Exemplo

Esse código falhará se SecurityTestClass é transparente, quando o Assert método lança um SecurityException.

using System;
using System.Security.Permissions;

namespace SecurityTestClassLibrary
{
    public class SecurityTestClass
    {
        // SecurityTransparent
        void SecurityTransparentMethod()
        {
            new FileIOPermission(PermissionState.Unrestricted).Assert();

            // perform I/O operations under Assert
        }
    }
}

Uma opção é codificar revisão [SecurityTransparentMethod]e se [SecurityTransparentMethod] é considerada segura de elevação, marca [SecurityTransparentMethod] com [SecurityCritical]. Isso requer que uma auditoria de segurança detalhadas, completa e disponível de erros deve ser executada em [SecurityTransparentMethod] juntamente com as transferências de telefonar que ocorrem dentro [SecurityTransparentMethod] sob o Assert:

using System;
using System.Security.Permissions;

namespace SecurityTestClassLibrary
{
    public class SecurityTestClass
    {
        [System.Security.SecurityCritical]
        void SecurityCriticalMethod()
        {
            new FileIOPermission(PermissionState.Unrestricted).Assert();

            // perform I/O operations under Assert
        }
    }
}

Outra opção é remover o Assert do código e permitir que qualquer fluxo de demandas de permissão E/s de arquivo subseqüente além [SecurityTransparentMethod] para o chamador - habilitar a segurança verifica a ocorrer. Nesse caso, nenhuma auditoria de segurança geralmente é necessidade, porque as demandas de permissão fluirá para o chamador e/ou o domínio do aplicativo.Demandas de permissão em conjunto são controladas através da diretiva de segurança, hospedagem de ambiente e concessões de permissão de código-fonte do código.

Consulte também

Outros recursos

Avisos de segurança