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.