Exportar (0) Imprimir
Expandir Tudo
Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original

Usando o método Deny

Calling Deny Prevents acessar to the recurso specified by the negado Permissão.If Your Código Calls Deny and a chamador downstream subsequently Demands the negado permissão, the verificação de segurança will Fail, Even if all callers have permissão to acessar that recurso.The permissão being demanded and the permissão being negado do not have to match exactly for the Deny to take Efeito, and the permissão demanded does not have to be a subconjunto of the negado permissão.No entanto, se a interseção das duas permissões é vazio (isto é, se eles têm Nada em comum), a chamar para negar não terá nenhum efeito.Note that Deny Cannot substituir Deeper Código on the pilha de chamadas that Performs an Assert.If Deeper Código on the pilha de chamadas Performs an Assert, the Deeper Código can acessar the recurso that Código denies higher on the pilha de chamadas.

Você pode usar chamadas para negar no seu código para proteção contra responsabilidade pois negar torna-impossível para o seu código a ser usado para acessar o recurso negado.However, the chamar to Deny not Bloquear assertions Security Future by callers downstream.

A ilustração a seguir mostra o que acontece quando você usar negar.Assume the seguinte Statements are Verdadeiro about assemblies A, B, C, D, and E, and permissão P1:

  • P1 represents the direito to ler Todos os Arquivos on the unidade C.

  • Assemblies A, B, C, D, and E have been Concedido P1.

  • Método F coloca uma demanda na permissão P1.

  • Método C cria uma instância da classe P1 e, em seguida, chama do P1 método Deny.

  • Método A está contido no conjunto de módulos (assembly) A, método B é contido no conjunto de módulos (assembly) B e assim por diante.

Usando negar

Permissão demanda e negar

Chamada do método C negar pode afetar o resultado das demandas de P1.De exemplo, suponha que chamadas de método B, B chama C, C chamadas chamadas E e E f.Como método F acessa diretamente o recurso que protege P1, método F invoca uma segurança Verificar P1 do P1 chamado método por demanda (ou usando um declarativo demanda).Essa demanda faz com que o tempo de execução para Marcar as permissões de todos os chamadores no pilha de chamadas, começando com assembly e.Porque assembly E foi Concedido P1 permissão, a tempo de execução continua para examinar as permissões do assembly C.Mas, pois tem método C negado P1, a segurança Marcar chamado pelo método E falha no que apontar e um SecurityException é acionada.It does not Matter Whether assembly C and its callers (Assemblies A and B) have been Concedido P1; The Segurança still Fails.Porque o método C chamado negar, código em conjuntos de módulos (assemblies) A e B Não é possível acessar o recurso protegido pelo P1.

O código a seguir mostra sintaxe declarativa para substituição verificações de segurança usando o método Deny.Neste exemplo, a ReflectionPermission sintaxe especifica dois valores: Uma enumeração SecurityAction https://msdn.microsoft.com/pt-br/library/system.security.permissions.securityaction(v=vs.80).aspx e a configuração para o TypeInformation Propriedade. TypeInformation is set to True to especificar that this permissão represents the direito to Exibir members Private through reflexão andSecurityAction.Deny is passed to negar that permissão.See the descrição of ReflectionPermission for a Concluir lista of values can you especificar.With this Segurança declaração, the método Cannot ler Private Members of a tipo through reflexão.

using System;
using System.Security.Permissions;

[ReflectionPermissionAttribute(SecurityAction.Deny, TypeInformation = true)]
public class MyClass
{
   public MyClass()
   {    
   }   

   public void GetPublicMembers()
   {
      //Access public members through reflection.
   }  
}

O código a seguir mostra imperativa sintaxe para substituição verificações de segurança usando o método Deny.Neste exemplo, o objeto ReflectionPermission é declarado e seu construtor é passado ReflectionPermissionFlag.TypeInformation ao inicializar a permissão atual.When the Deny método is chamado, the Código and callers never Can Be Used to ler Fields Private through reflexão.

using System;
using System.Security.Permissions;

public class MyClass {
   public MyClass() {    
   }   

   public void ReadRegistry() { 
      ReflectionPermission MyPermission = new ReflectionPermission (ReflectionPermissionFlag.TypeInformation);
      MyPermission.Deny();

      // Access public members through reflection.
   }  
}

Você deve ser extremamente cuidadoso ao negando FileIOPermission, RegistryPermissionWebPermission, UrlIdentityPermission, SiteIdentityPermissione EnvironmentPermission porque único Arquivos, Registro entradas, URLs e caminhos sistema podem ser descritos usando múltiplo nomes.De exemplo, um Simples, MyFile.log, arquivo pode ser relacionado um número das maneiras, incluindo "c:\MyFile.log" e "\\MyMachineName\c$\MyFile.log".Se você criar uma permissão que representa o acesso para "c:\MyFile.log" e, em seguida, negar essa permissão a seu código, talvez seu código ainda consiga acessar o arquivo usando o caminho alternativo "\\MyMachineName\c$\MyFile.log".

Você pode usar uma combinação de PermitOnlynegar para evitar problemas canonization. PermitOnly Gives You the ability to especificar only one of several Possible Names for a recurso and has the efeito colateral of denying acessar to that recurso Using any Outro Name.After You Use PermitOnly to the name Allowed one especificar for a recurso, you should use Deny to desautorizar Acessar to the recurso Using that Name.

O código a seguir usa uma combinação de negarPermitOnly para impedir que seu código acesse um recurso chamado MyLog.log.This Código also Blocks acessar to the recurso Using alternativo all Names or Paths.

[FileIOPermissionAttribute(SecurityAction.PermitOnly, All = @"C:\ ")]
[FileIOPermissionAttribute(SecurityAction.Deny, All = @"C:\MyLog.log")] 

Contribuições da comunidade

ADICIONAR
Mostrar:
© 2015 Microsoft