CA2109: Revise os manipuladores de eventos visíveis

TypeName

ReviewVisibleEventHandlers

CheckId

CA2109

<strong>Categoria</strong>

Microsoft.Security

Alteração significativa

Quebrando

Causa

Um método de manipulação de eventos do público ou protegido foi detectado.

Descrição da regra

Um método de manipulação de eventos visível externamente apresenta um problema de segurança exige a 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 de delegado, que invoca o método exposto pode ser adicionado a qualquer evento, como 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 do sistema altamente confiável em resposta a ações do usuário como, por exemplo, clicando em um botão. Adicionando uma verificação de segurança para um método de manipulação de eventos não impedir código Registrando 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 chamada pode ter apenas altamente confiáveis chamadores quando o método do manipulador de evento é 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 declarada quando o método é invocado. 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ável como declarar permissões ou eliminando a permissão de código não gerenciado?

  • Quais são as ameaças de segurança e para o seu código, porque 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 avaliar o seguinte:

  • 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 revisão de segurança cuidadosa 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

Demandas de segurança