Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA2109 |
Cím | Látható eseménykezelők áttekintése |
Kategória | Biztonság |
A javítás kompatibilitástörő vagy nem törik | Törés |
Alapértelmezés szerint engedélyezve a .NET 9-ben | Nem |
Ok
A rendszer nyilvános vagy védett eseménykezelési módszert észlelt.
Feljegyzés
Ez a szabály elavult. Legutóbb a Microsoft.CodeAnalysis.NetAnalyzers 7.0.0 NuGet csomaggal és a .NET 7 SDK-val szállították.
A szabály azért lett eltávolítva, mert az elemző által figyelmeztetett fenyegetés (egy nem megbízható közvetítő, amely egy kiemelt eseménykezelőt csatlakoztat egy kiemelt eseményindítóhoz) nem létezett a 4.5-ös .NET-keretrendszer óta.
Szabály leírása
Egy külsőleg látható eseménykezelési módszer olyan biztonsági problémát jelent, amely felülvizsgálatot igényel.
Ne tegye közzé az eseménykezelési módszereket, kivéve, ha feltétlenül szükséges. A közzétett metódust meghívó eseménykezelőt, delegálttípust minden eseményhez hozzáadhatja, amíg a kezelő és az eseményaadék megegyezik. Az eseményeket bármilyen kód okozhatja, és gyakran magas megbízhatóságú rendszerkód is generálja a felhasználói műveletekre, például egy gombra való kattintásra válaszul. Ha biztonsági ellenőrzést ad hozzá egy eseménykezelési módszerhez, az nem akadályozza meg, hogy a kód regisztráljon egy eseménykezelőt, amely meghívja a metódust.
Az igény nem képes megbízhatóan megvédeni egy eseménykezelő által meghívott metódust. A biztonsági követelmények a hívásverem hívóinak vizsgálatával segítenek megvédeni a kódokat a nem megbízható hívókkal szemben. Az eseménykezelőt egy eseményhez hozzáadó kód nem feltétlenül jelenik meg a hívásveremen az eseménykezelő metódusainak futtatásakor. Ezért előfordulhat, hogy a hívásverem csak erősen megbízható hívókkal rendelkezik az eseménykezelő metódus meghívásakor. Ez az eseménykezelő metódus által támasztott igények sikerességét eredményezi. Emellett előfordulhat, hogy a kért engedély érvényes lesz a metódus meghívásakor. Ezen okok miatt a szabály megsértésének nem kijavításának kockázata csak az eseménykezelési módszer áttekintése után értékelhető. A kód áttekintésekor vegye figyelembe a következő problémákat:
Az eseménykezelő végrehajt minden olyan műveletet, amely veszélyes vagy kihasználható, például engedélyeket igényel vagy letiltja a nem felügyelt kódengedélyeket?
Mik a kód biztonsági fenyegetései, mert bármikor futtatható csak megbízható hívókkal a veremen?
Szabálysértések kijavítása
A szabály megsértésének kijavításához tekintse át a metódust, és értékelje ki a következőket:
Nem nyilvánossá teheti az eseménykezelési módszert?
Ki tudja helyezni az összes veszélyes funkciót az eseménykezelőből?
Ha biztonsági igény van előállítva, ez valamilyen más módon is megvalósítható?
Mikor kell letiltani a figyelmeztetéseket?
A szabály figyelmeztetését csak gondos biztonsági felülvizsgálat után tiltsa le, hogy a kód ne jelentsen biztonsági fenyegetést.
Figyelmeztetés mellőzése
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.
#pragma warning disable CA2109
// The code that's violating the rule is on this line.
#pragma warning restore CA2109
Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none
a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_diagnostic.CA2109.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Példa
Az alábbi kód egy olyan eseménykezelési módszert mutat be, amely rosszindulatú kóddal visszaélhet.
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.");
}
}