Protegendo o acesso do método

Alguns métodos podem não ser adequados para permitir que um código arbitrário não confiável chamar. Tais métodos apresentam vários riscos: O método pode fornecer algumas informações restritas; Ele pode acreditar que todas as informações passadas a ele; ele não pode fazer a verificação de erro em parâmetros; ou, com parâmetros incorretos, ele talvez não funcione direito ou fazer algo nocivo. Você deve estar atento esses casos e agir para ajudar a proteger o método.

Em alguns casos, talvez você precise restringir métodos que não são destinados a uso público, mas ainda devem ser pública. Por exemplo, você pode ter uma interface que precisa ser chamado em suas próprias DLLs e, portanto, deve ser públicas, mas não deseja expor publicamente para impedir que os clientes usá-lo ou para impedir que o código mal-intencionado explora o ponto de entrada em seu componente. Outro motivo comum para restringir um método não destinados ao uso público (mas que deve ser pública) é evitar a necessidade de documento e o que pode ser uma interface muito interna de suporte.

Gerenciado código oferece várias maneiras para restringir o acesso do método:

  • Limite o escopo de acessibilidade para a classe, assembly ou classes derivadas, se eles podem ser confiáveis. Esta é a maneira mais simples para limitar o acesso do método. Observe que, em geral, as classes derivadas podem ser menos confiáveis do que a classe que eles derivam, embora em alguns casos, eles compartilham a identidade da classe pai. Em particular, não inferir a relação de confiança de que a palavra-chave protegido, que não é necessariamente usado no contexto de segurança.

  • Limitar o acesso do método para chamadores de uma identidade especificada – essencialmente, qualquer particular evidências (nome forte, publisher, zona e assim por diante) que você escolher.

  • Limite o acesso do método para chamadores com permissões de você selecionar.

Da mesma forma, a segurança declarativa permite controlar a herança de classes. Você pode usar InheritanceDemand para fazer o seguinte:

  • Exigem que as classes derivadas para ter uma identidade especificada ou permissão.

  • Exigem que as classes derivadas substituem os métodos específicos para ter uma identidade especificada ou permissão.

O exemplo a seguir mostra como ajudar a proteger uma classe pública para acesso limitado, exigindo que os chamadores ser assinado com um nome forte específico. Este exemplo usa a StrongNameIdentityPermissionAttribute com um demanda para o nome forte. Para informações baseadas em tarefas sobre como assinar um assembly com um nome forte, consulte Creating and Using Strong-Named Assemblies.

<StrongNameIdentityPermissionAttribute(SecurityAction.Demand, PublicKey := "…hex…", Name := "App1", Version := "0.0.0.0")>  _
Public Class Class1
End Class
[StrongNameIdentityPermissionAttribute(SecurityAction.Demand, PublicKey="…hex…", Name="App1", Version="0.0.0.0")]
public class Class1
{

} 

Consulte também

Conceitos

Diretrizes para Codificação Segura