Sdílet prostřednictvím


CA2109: Zkontrolujte viditelné obslužné rutiny událostí

Název_typu

ReviewVisibleEventHandlers

CheckId

CA2109

Kategorie

Microsoft.Security

Změnit rozdělení

Rozdělení

Příčina

Byl zjištěn veřejné nebo chráněná metoda zpracování událostí.

Popis pravidla

Externě viditelné metodu zpracování událostí představuje problém zabezpečení, který vyžaduje recenzi.

Metody zpracování události by měly být vystaveny není Pokud to nezbytně nutné.Obslužné rutiny události typ delegáta, který vyvolá metodu exponované lze přidat všechny události jako odpovídají podpisy a zpracování událostí.Události lze zvýšit potenciálně jakýkoli kód a často vznesené vysoce důvěryhodné systému kód odezvy na akce uživatele, jako například klepnutí na tlačítko.Kontrola zabezpečení metodu zpracování události přidání nezabrání kód registrace obslužné rutiny události, která vyvolá metodu.

Vyžádaného volání nelze spolehlivě chránit metoda vyvolat obslužnou rutinu události.Zabezpečení požadavků nápovědy chránit kód z nedůvěryhodných volajícím porovnáním volajícím v zásobníku volání.Kód, který přidá obslužnou rutinu události pro událost není nutně v zásobníku volání metody zpracování události spuštění.Proto zásobník volání může mít pouze vysoce důvěryhodné volajícím při metoda obslužné rutiny události.To způsobí, že požadavky metody zpracování události proběhla úspěšně.Také poptávané oprávnění může být uplatněna při vyvolání metody.Z těchto důvodů lze riziko není porušením tohoto pravidla stanovení posoudit pouze po zkontrolování metoda zpracování událostí.Při prohlížení vašeho kódu, zvažte následující skutečnosti:

  • Obslužné rutiny provádět všechny operace, které jsou nebezpečné nebo zneužít jako vyhlašování oprávnění nebo oprávnění nespravovaný kód potlačení?

  • Co jsou ohrožení zabezpečení z kódu a protože můžete spustit kdykoli s pouze vysoce důvěryhodné v zásobníku volání?

Jak opravit porušení

Porušení tohoto pravidla, zkontrolujte metodu a vyhodnotit následující:

  • Můžete vytvořit metody zpracování události neveřejné?

  • Můžete přesunout všechny nebezpečné funkce z obslužné rutiny události?

  • Pokud je zavedena poptávky zabezpečení, můžete to provést jiným způsobem?

Při potlačení upozornění

Potlačit varování od tohoto pravidla pouze po pečlivé zabezpečení přezkoumání se ujistěte, že váš kód nepředstavuje ohrožení zabezpečení.

Příklad

Následující kód znázorňuje metodu zpracování událostí, které mohou být zneužity škodlivého kódu.

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.");
      }

   }
}

Viz také

Referenční dokumentace

CodeAccessPermission.Demand

EventArgs

Koncepty

Požadavky zabezpečení