Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
| Eigenschaft | Wert |
|---|---|
| Regel-ID | CA2101 |
| Titel | Marshalling für „P/Invoke“-Zeichenfolgenargumente festlegen |
| Kategorie | Globalisierung |
| Fix führt zu Unterbrechungen oder bleibt funktionsfähig | Untrennbar |
| Standardmäßig in .NET 10 aktiviert | Als Vorschlag |
| Anwendbare Sprachen | C# und Visual Basic |
Ursache
Ein Plattformaufrufmember lässt teilweise vertrauenswürdige Aufrufer zu, enthält einen Zeichenfolgenparameter und führt kein explizites Marshalling der Zeichenfolge durch.
Regelbeschreibung
Wenn Sie von Unicode in ANSI konvertieren, ist es möglich, dass nicht alle Unicode-Zeichen in einer bestimmten ANSI-Codepage dargestellt werden können. Die Best-Fit-Zuordnung versucht, dieses Problem zu lösen, indem ein Zeichen ersetzt wird, das nicht dargestellt werden kann. Dieses Feature kann ein potenzielles Sicherheitsrisiko darstellen, da Sie nicht steuern können, welches Zeichen ausgewählt wird. Beispielsweise könnte schädlicher Code absichtlich eine Unicode-Zeichenfolge erstellen, die Zeichen enthält, die in einer bestimmten Codepage nicht vorkommen und die dann in dateisystemspezifische Sonderzeichen wie „..“ umgewandelt werden. oder "/" Beachten Sie auch, dass für Sonderzeichen regelmäßig Sicherheitsüberprüfungen durchgeführt werden, bevor die Zeichenfolge in ANSI konvertiert wird.
Die Best-Fit-Zuordnung ist die Standardeinstellung für die nicht verwaltete Konvertierung von WChar zu MByte. Wenn Sie die best-fit Zuordnung nicht explizit deaktivieren, kann Ihr Code aufgrund dieses Problems eine ausnutzbare Sicherheitslücke enthalten.
Achtung
Die Codezugriffssicherheit (Code Access Security, CAS) sollte nicht als Sicherheitsgrenze betrachtet werden.
So beheben Sie Verstöße
Führen Sie ein explizites Marshalling für Zeichenfolgen-Datentypen durch, um einen Verstoß dieser Regel zu korrigieren.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie keine Warnung dieser Regel.
Beispiel
Das folgende Beispiel zeigt eine Methode, die gegen diese Regel verstößt, und die Korrektur dieses Verstoßes.
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