Código não gerenciado
Alguns códigos de biblioteca precisa chamar código não gerenciado (por exemplo, código nativo APIs, sistema autônomo Win32).Porque isso significa vai fora do perímetro de segurança para código gerenciado, devido cuidado é necessário.Se seu código for neutro de segurança, seu código e qualquer código que chama devem ter permissão de código não gerenciado (SecurityPermission com o UnmanagedCode sinalizar especificado).
No entanto, geralmente é inaceitáveis para seu chamador tenha permissões tão poderoso.Em tais casos, seu código confiável pode ser intermediário, semelhante a wrapper gerenciado ou código da biblioteca descrito em Protegendo o código de wrapper.Se a funcionalidade subjacente de código não gerenciado é totalmente segura, ele pode ser diretamente exposto; caso contrário, uma verificação de permissão adequada (por demanda) é necessária primeiro.
Quando seu código chama o código não gerenciado, mas desejar requerem chamadores de ter permissão para acessar código não gerenciado, você deve declarar esse direito.Uma declaração bloqueia a movimentação da pilha em seu quadro.Você deve ter cuidado se você não criará uma falha de segurança nesse processo.Normalmente, isso significa que você deve demandar uma permissão adequada dos seus chamadores e, em seguida, usar código não gerenciado para executar apenas o que permite essa permissão e não mais.Em alguns casos (por exemplo, uma função do horário de get), código não gerenciado pode ser diretamente exposto a chamadores sem nenhuma verificação de segurança.Em qualquer caso, qualquer código que declara deve assumir a responsabilidade de segurança.
Como qualquer código gerenciado que fornece um caminho de código para código nativo é um possível alvo de um código mal intencionado, determinar qual código não gerenciado pode ser usado com segurança e como ele deve ser usado requer muito cuidado.Em geral, código não gerenciado deve nunca ser diretamente exposto a chamadores parcialmente confiável.Há dois principais considerações avaliar a segurança de uso de código não gerenciado em bibliotecas que podem ser chamados pelo código parcialmente confiável:
Funcionalidade.A API não gerenciada oferece funcionalidade que não permita que os chamadores para executar operações potencialmente perigosas?segurança de acesso do código usa permissões para garantir acesso aos recursos, portanto, considere se a API utiliza arquivos, uma interface de usuário, ou processos, ou ele expõe informações protegidas.Em caso afirmativo, o código gerenciado encapsulá-la deve exigem as permissões necessárias antes permitindo que ele seja inserido.Além disso, enquanto não protegido por uma permissão, acesso à memória deve ser restrito a segurança de tipos estrita.
Verificação de parâmetro.Um passagens de ataque comuns parâmetros inesperados para exposto métodos da API de código não gerenciado em uma tentativa de fazer com que eles operem fora das especificações.Saturações de buffer usando o índice fora do intervalo ou valores de deslocamento são um exemplo comum desse tipo de ataque, assim sistema autônomo quaisquer parâmetros que podem explorar um bug no código subjacente.Assim, mesmo se o código não gerenciado API é funcionalmente seguro (após demandas necessárias) para parcialmente confiável chamadores, gerenciados código deve também seleção parâmetro validade exaustivamente para garantir que nenhuma chamada indesejada sejam possível de código mal-intencionado usando a camada de wrapper de código gerenciado.