Compartilhar via


CA2109: Manipuladores de eventos visíveis de revisão

TypeName

ReviewVisibleEventHandlers

CheckId

CA2109

<strong>Categoria</strong>

Microsoft.Security

Alteração significativa

Quebrando

Causa

Foi detectado um método de tratamento de evento público ou protegido.

Descrição da regra

Um método de manipulação de eventos visível externamente apresenta um problema de segurança que requer revisão.

Métodos de manipulação de eventos não devem ser expostos a menos que absolutamente necessário.Um manipulador de eventos, um tipo delegate, que invoca o método exposto pode ser adicionado a qualquer evento, desde que as assinaturas de manipulador de evento correspondem.Eventos potencialmente podem ser disparados por qualquer código e freqüentemente são gerados pelo código de sistema altamente confiável em resposta a ações do usuário como, por exemplo, clicando em um botão.Adicionar uma verificação de segurança para um método de tratamento de evento não impede o código de registrar um manipulador de eventos que invoca o método.

Uma demanda de forma confiável não pode proteger um método chamado por um manipulador de eventos.Ajuda de demandas de segurança proteger o código de chamadores não confiáveis, examinando os chamadores na pilha de chamadas.Código que adiciona um manipulador de eventos para um evento não está necessariamente presente na pilha de chamadas quando os métodos do manipulador de eventos é executado.Portanto, a pilha de chamadas pode ter apenas altamente confiáveis chamadores quando o método de manipulador de eventos é chamado.Isso faz com que as demandas feitas pelo método do manipulador de eventos para o sucesso.Além disso, a permissão de demanda pode ser confirmada quando o método for chamado.Por esses motivos, o risco de não corrigir uma violação desta regra só pode ser avaliado após rever o método de manipulação de eventos.Ao analisar seu código, considere as seguintes questões:

  • O manipulador de eventos realiza todas as operações são perigosas ou exploráveis, tais como declarar permissões ou eliminando a permissão de código não gerenciado?

  • Quais são as ameaças de segurança de seu código e como ele pode ser executado a qualquer momento com apenas altamente confiáveis que os chamadores na pilha?

Como corrigir violações

Para corrigir uma violação desta regra, o método de revisão e avaliação a seguir:

  • Você pode fazer o método de manipulação de eventos não-públicos?

  • Você pode mover toda a funcionalidade do manipulador de eventos perigosa?

  • Se uma demanda de segurança é imposta, isso pode ser feito de alguma outra maneira?

Quando suprimir avisos

Elimina um aviso esta regra somente após uma análise cuidadosa de segurança para certificar-se de que seu código não representem uma ameaça de segurança.

Exemplo

O código a seguir mostra um método de manipulação de eventos que pode ser usados incorretamente por código mal-intencionado.

using System;
using System.Security;
using System.Security.Permissions;

namespace EventSecLibrary
{
   public class HandleEvents
   {
      // Due to the access level and signature, a malicious caller could 
      // add this method to system-triggered events where all code in the call
      // stack has the demanded permission.

      // Also, the demand might be canceled by an asserted permission.

      [SecurityPermissionAttribute(SecurityAction.Demand, UnmanagedCode=true)]

      // Violates rule: ReviewVisibleEventHandlers.
      public static void SomeActionHappened(Object sender, EventArgs e)
      {
         Console.WriteLine ("Do something dangerous from unmanaged code.");
      }

   }
}

Consulte também

Referência

CodeAccessPermission.Demand

System.EventArgs

Conceitos

Exigências de segurança