CA2101: P/Invoke sztringargumentumok rendezési beállításának megadása
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA2101 |
Cím | P/Invoke sztringargumentumok rendezési beállításának megadása |
Kategória | Globalizáció |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 8-ban | Javaslatként |
Ok
A platformmeghívó tag lehetővé teszi a részlegesen megbízható hívók használatát, rendelkezik sztringparaméterrel, és nem teszi explicit módon a sztringet.
Szabály leírása
Unicode-ról ANSI-vé való konvertáláskor előfordulhat, hogy nem minden Unicode-karakter jelenik meg egy adott ANSI-kódlapon. A legjobban illeszkedő leképezés úgy próbálja megoldani ezt a problémát, hogy egy olyan karaktert helyettesít a karakterrel, amely nem jeleníthető meg. A funkció használata biztonsági rést okozhat, mert nem szabályozhatja a választott karaktert. A rosszindulatú kód például szándékosan létrehozhat egy Unicode-sztringet, amely olyan karaktereket tartalmaz, amelyek nem találhatók egy adott kódlapon, amelyeket a rendszer speciális fájlrendszeri karakterekké alakít át, például a "." karaktert. vagy "/". Vegye figyelembe azt is, hogy a speciális karakterek biztonsági ellenőrzése gyakran előfordul a sztring ANSI-vé alakítása előtt.
A legjobban illeszkedő leképezés a nem felügyelt átalakítás( WChar– MByte) alapértelmezett beállítása. Ha nem tiltja le kifejezetten a legjobban illeszkedő leképezést, előfordulhat, hogy a kód biztonsági rést tartalmaz a probléma miatt.
Figyelem
A kódelérési biztonság (CAS) nem tekinthető biztonsági határnak.
Szabálysértések kijavítása
A szabály megsértésének kijavításához explicit módon marshal sztring adattípusokat kell megadni.
Mikor kell letiltani a figyelmeztetéseket?
Ne tiltsa el a szabály figyelmeztetését.
Példa
Az alábbi példa egy olyan módszert mutat be, amely megsérti ezt a szabályt, majd bemutatja a szabálysértés kijavításának módját.
class NativeMethods
{
// Violates rule: SpecifyMarshalingForPInvokeStringArguments.
[DllImport("advapi32.dll", CharSet = CharSet.Auto)]
internal static extern int RegCreateKey(IntPtr key, String subKey, out IntPtr result);
// Satisfies rule: SpecifyMarshalingForPInvokeStringArguments.
[DllImport("advapi32.dll", CharSet = CharSet.Unicode)]
internal static extern int RegCreateKey2(IntPtr key, String subKey, out IntPtr result);
}
Friend Class NativeMethods
' Violates rule: SpecifyMarshalingForPInvokeStringArguments.
<DllImport("advapi32.dll", CharSet:=CharSet.Auto)>
Friend Shared Function RegCreateKey(ByVal key As IntPtr, ByVal subKey As String, <Out> ByRef result As IntPtr) As Integer
End Function
' Satisfies rule: SpecifyMarshalingForPInvokeStringArguments.
<DllImport("advapi32.dll", CharSet:=CharSet.Unicode)>
Friend Shared Function RegCreateKey2(ByVal key As IntPtr, ByVal subKey As String, <Out> ByRef result As IntPtr) As Integer
End Function
End Class
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: