CA2119: Privát felületeknek megfelelő tömítési módszerek
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA2119 |
Cím | Privát felületeknek megfelelő tömítési módszerek |
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 8-ban | Nem |
Ok
Az örökölhető nyilvános típus egy (Friend
Visual Basic)-felület felülírható metódusát internal
biztosítja.
Szabály leírása
A felületi metódusok nyilvános akadálymentességgel rendelkeznek, amelyet a implementálási típus nem módosíthat. A belső interfész létrehoz egy szerződést, amelyet nem kívánnak megvalósítani az interfészt meghatározó szerelvényen kívül. Egy nyilvános típus, amely egy belső felület metódusát implementálja a virtual
(Overridable
Visual Basic) módosító használatával, lehetővé teszi, hogy a metódust felül lehessen bírálni egy olyan származtatott típussal, amely kívül esik a szerelvényen. Ha a definiáló szerelvény egy második típusa meghívja a metódust, és csak belső szerződésre számít, a viselkedés sérülhet, ha ehelyett a külső szerelvény felülbírált metódusa fut. Ez biztonsági rést hoz létre.
Szabálysértések kijavítása
A szabály megsértésének kijavításához megakadályozza, hogy a metódus felül legyen bírálva a szerelvényen kívül az alábbiak egyikével:
Végezze el a deklarálás típusát
sealed
(NotInheritable
a Visual Basicben).Módosítsa a deklarálási típus
internal
akadálymentességét (Friend
a Visual Basicben).Távolítsa el az összes nyilvános konstruktort a deklarálási típusból.
Implementálja a metódust a
virtual
módosító használata nélkül.A metódust explicit módon implementáljuk.
Mikor kell letiltani a figyelmeztetéseket?
A szabály figyelmeztetését nyugodtan mellőzheti, ha alapos felülvizsgálat után nem áll fenn olyan biztonsági probléma, amely kihasználható lenne, ha a metódus felülbírálásra kerül a szerelvényen kívül.
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 CA2119
// The code that's violating the rule is on this line.
#pragma warning restore CA2119
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.CA2119.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Example 1
Az alábbi példa egy olyan típust mutat be, BaseImplementation
amely megsérti ezt a szabályt.
// Internal by default.
interface IValidate
{
bool UserIsValidated();
}
public class BaseImplementation : IValidate
{
public virtual bool UserIsValidated()
{
return false;
}
}
public class UseBaseImplementation
{
public void SecurityDecision(BaseImplementation someImplementation)
{
if (someImplementation.UserIsValidated() == true)
{
Console.WriteLine("Account number & balance.");
}
else
{
Console.WriteLine("Please login.");
}
}
}
Interface IValidate
Function UserIsValidated() As Boolean
End Interface
Public Class BaseImplementation
Implements IValidate
Overridable Function UserIsValidated() As Boolean _
Implements IValidate.UserIsValidated
Return False
End Function
End Class
Public Class UseBaseImplementation
Sub SecurityDecision(someImplementation As BaseImplementation)
If (someImplementation.UserIsValidated() = True) Then
Console.WriteLine("Account number & balance.")
Else
Console.WriteLine("Please login.")
End If
End Sub
End Class
Example 2
Az alábbi példa az előző példa virtuális metódus-implementációját használja ki.
public class BaseImplementation
{
public virtual bool UserIsValidated()
{
return false;
}
}
public class UseBaseImplementation
{
public void SecurityDecision(BaseImplementation someImplementation)
{
if (someImplementation.UserIsValidated() == true)
{
Console.WriteLine("Account number & balance.");
}
else
{
Console.WriteLine("Please login.");
}
}
}
Public Class BaseImplementation
Overridable Function UserIsValidated() As Boolean
Return False
End Function
End Class
Public Class UseBaseImplementation
Sub SecurityDecision(someImplementation As BaseImplementation)
If (someImplementation.UserIsValidated() = True) Then
Console.WriteLine("Account number & balance.")
Else
Console.WriteLine("Please login.")
End If
End Sub
End Class
Kapcsolódó információk
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: