Compartilhar via


Demandas de segurança

Para garantir que ers telefonar únicos que receberam uma permissão especificada pode telefonar seu código, você pode maneira declarativa ou imperativa exige que ers telefonar do seu código possui uma permissão específica ou conjunto de permissões.Uma demanda faz com que o tempo de execução para executar uma verificação de segurança para impor restrições no código de chamada.Durante uma verificação de segurança, o tempo de execução percorre o telefonar pilha, examinando as permissões de cada telefonar er na pilha e determinar se foi concedida a permissão sendo exigido para cada telefonar er.Se um chamador não tem permissão usados desse sistema operacional for encontrado, a verificação de segurança falhará e um SecurityException é lançada. As demandas únicas não resultam em um exame da pilha são demandas de link, que verificar somente o chamador imediato.

Você pode fazer com que uma verificação de segurança para ocorrer 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 é chamado de qualquer membro de uma determinada classe, você pode colocar uma demanda antes da classe para que ela se aplica a cada membro da classe.O restante deste tópico explica como tornar as exigências de segurança, quando você deve fazê-lo 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 telefonar er, você deve fazer uma demanda de segurança na biblioteca para ajudar a verificar se todos os telefonar ers no telefonar pilha tem permissão para acessar esse recurso.Suas demandas podem ser declarativa or 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 momento específico ou em qualquer contexto específico.Como o estado da pilha de chamadas em um construtor de classe não está bem definido, exercida sobre construtores de classe pode produzir resultados inesperados e indesejados.

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

  • Certifique-se de que o chamador originado de um determinado site ou a zona ou foi assinado por uma editora específica, exigindo que os chamadores têm uma permissão de identidade específico.No entanto, você deve fazer isso somente quando você estará concedendo acesso adicional com base na correspondência com uma identidade, não quando você está negando o acesso com base na correspondência com uma identidade.Porque é relativamente simples modificar ou identidade do código de máscara, negando acesso com base na identidade sozinha não é uma maneira confiável de proteger seu código e os recursos que ela acessa contra acesso não autorizado.

  • Certifique-se de que um objeto pode ser criado somente pelos chamadores que tem uma permissão específica, colocando a demanda em nível de classe do objeto.Por exemplo, suponha que você tenha uma classe chamada myFileStream, que deriva de FileStream classe e você desejar 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 fluxo criado por myFileStream no nível de classe a myFileStream classe.

  • Você também pode colocar as demandas no código que define ou obter uma propriedade.Em geral, você coloca sistema autônomo demandas por permissões menos restritivas no acessador get em vez de no acessador conjunto, a menos que a propriedade contém informações confidenciais, sistema autônomo uma senha.

    Observação:

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

    Observação:

    As demandas que podem ser aplicadas nos níveis de classe, método, evento e propriedade apenas; assemblies e não do indivíduo-particular variáveis membros não são protegidos por demandas.Demandas inseridas no conjunto de módulos (assembly) ou não-particular nível variável não produzirá um aviso do compilador.Portanto, é importante usar propriedades em vez de membros públicos a fim de garantir a proteção que fornecem as demandas.

Consulte também

Conceitos

Escrevendo seguro classe bibliotecas

Referência

SecurityException

Outros recursos

Segurança de Acesso de código