Compartilhar via


Demandas de segurança

Para garantir que somente os chamadores que receberam uma permissão especificada podem chamar seu código, você pode maneira declarativa ou imperativa exige que os chamadores do seu código tenham uma permissão específica ou conjunto de permissões. Uma demanda faz com que o tempo de execução executar uma verificação de segurança para impor restrições no código de chamada. Durante uma verificação de segurança, o runtime examina a pilha de chamadas, examinando as permissões de cada chamador na pilha e determinar se a permissão sendo exigida foi concedida à cada chamador. Se um chamador que não tenha a permissão exigida for encontrado, a verificação de segurança falhará e um SecurityException é lançada. As exigências de apenas não resultam em um stack walk são as demandas de link, que verifique que somente o chamador imediato.

Você pode fazer uma verificação de segurança para que ocorram sempre que um determinado método for chamado ou antes que um determinado bloco de código seja executado. Se desejar que a verificação de segurança para ocorrer quando qualquer membro de uma determinada classe é chamado, você pode colocar uma demanda antes da classe para que ele se aplica a todos os membros da classe. O restante deste tópico explica como você fazer demandas de segurança, ao fazer isso e por que você pode escolher um tipo de demanda de segurança sobre a outra.

Se você estiver escrevendo uma biblioteca que acessa diretamente um recurso protegido, e se esse acesso é exposto ao chamador, você deve fazer com que uma demanda de segurança na biblioteca para ajudar a verificar se todos os chamadores na pilha de chamadas tem permissão para acessar o recurso. Suas demandas podem ser declarativa ou imperativo. Observe que as demandas nunca devem ser feitas em um construtor de classe porque o código do construtor de classe não é garantido para executar em qualquer ponto específico ou em qualquer contexto específico. Porque o estado da pilha de chamadas em um construtor de classe não é bem definido, a pressão exercida sobre os construtores de classe pode produzir resultados inesperados e indesejados.

Você deve usar as diretrizes a seguir, independentemente do tipo de demanda que você verifique:

  • Certifique-se de que um objeto pode ser criado apenas por chamadores que têm uma permissão específica, colocando a demanda no nível de classe do objeto. Por exemplo, suponha que você tem uma classe chamada myFileStream, que deriva do FileStream classe e quiser garantir que somente os chamadores autorizados podem criar instâncias de myFileStream. Você colocaria uma demanda declarativa para um FileIOPermission objeto que representa o direito de acessar o fluxo criado por myFileStream no nível de classe de myFileStream classe.

  • Você também pode colocar as demandas no código que definir ou obter uma propriedade. Em geral, você colocar as demandas por permissões menos restritivas no acessador get, em vez de fazê-lo em um assessor set, a menos que a propriedade contém informações confidenciais, como, por exemplo, uma senha.

    Observação

    Verificações de segurança baseada em função tem semântica ligeiramente diferente de verificações de segurança de acesso do código.Para obter mais informações, consulte Role-Based Security.

    Observação

    Demandas podem ser aplicadas na classe, método, evento e níveis de propriedade apenas; assemblies e membros individuais de variáveis não-particulares não são protegidos por demandas.Pressão exercida sobre o assembly ou o nível de variável não-particulares não produzirá um aviso do compilador.Portanto, é importante usar propriedades em vez de membros públicos para assegurar a proteção que as demandas de oferecem.

Consulte também

Referência

SecurityException

Conceitos

Segurança de Acesso de código

Criação de bibliotecas de classe seguro

Histórico de alterações

Date

History

Motivo

Julho de 2010

Removidas as informações obsoletas.

Correção de bug de conteúdo.