CA2109: Przejrzyj widoczne programy obsługi zdarzeń
TypeName |
ReviewVisibleEventHandlers |
CheckId |
CA2109 |
Kategoria |
Microsoft.Security |
Zmiana kluczowa |
Kluczowa |
Przyczyna
Wykryto publiczną lub chronioną metodę obsługi zdarzeń.
Opis reguły
Metoda obsługi zdarzeń widoczna na zewnątrz przedstawia problem zabezpieczeń, który wymaga przeglądu.
Metody obsługi zdarzeń nie powinny być udostępnione, chyba że jest to absolutnie konieczne.Uchwyt zdarzenia, typ delegata, który wywołuje narażoną metodę może być dodany do każdego zdarzenia o ile podpisy uchwytu i zdarzenia pasują.Zdarzenia potencjalnie mogą zostać wywołane przez dowolny kod i są często wywoływane przez wysoce zaufany kod systemu w odpowiedzi na akcje użytkownika, takie jak kliknięcie przycisku.Dodawanie sprawdzenia zabezpieczeń do metody obsługi zdarzeń nie zapobiega rejestrowaniu przez kod uchwytu zdarzeń, który wywołuje metodę.
Żądanie nie chroni w sposób wiarygodny metody wywoływanej przez uchwyt zdarzenia.Żądania zabezpieczeń pomagają zabezpieczyć kod z niezaufanego obiektu wywołującego przez badanie obiektu wywołującego na stosie wywołań.Kod, który dodaje uchwyt zdarzenia do zdarzenia niekoniecznie jest obecny na stosie wywołań podczas uruchomienia metody obsługi zdarzenia.Dlatego stos wywołań może mieć tylko bardzo zaufane obiekty wywołujące, gdy wywoływana jest metoda obsługi zdarzeń.Sprawia to, że żądanie stawiane przez metodę obsługi zdarzeń powodzi się.Ponadto żądane uprawnienie może być również potwierdzone, gdy wywoływana jest metoda.Z tych powodów ryzyko nie naprawienia naruszenia tej zasady może być potwierdzone dopiero po przejrzeniu metody obsługi zdarzeń.Przeglądając kod, należy rozważyć następujące zagadnienia:
Czy uchwyt zdarzenia wykonuje jakiekolwiek operacje, które są niebezpieczne lub mogą być wykorzystane, jak potwierdzanie uprawnień lub pomijanie uprawnień kodu niezarządzanego?
Jakie są zagrożenia bezpieczeństwa do i z kodu, z racji, że może on być uruchomiony w dowolnym momencie z tylko bardzo zaufanych obiektów wywołujących na stosie?
Jak naprawić naruszenia
Aby naprawić naruszenie tej zasady, przejrzyj metodę i oszacuj następujące:
Czy można zmienić metodę obsługi zdarzeń na niepubliczną?
Czy można przenieść wszystkich niebezpieczne funkcjonalności z obsługi zdarzenia?
W przypadku nałożenia żądania zabezpieczeń czy może być to zrobić w inny sposób?
Kiedy pominąć ostrzeżenia
Należy pominąć ostrzeżenie od tej reguły tylko po dokonaniu uważnego przeglądu zabezpieczeń, aby upewnić się, że kod nie stwarza zagrożenia bezpieczeństwa.
Przykład
Poniższy kod przedstawia metodę obsługi zdarzeń, która może być nadużywana przez złośliwy kod.
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.");
}
}
}