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