CA5393 : Ne pas utiliser de valeur DllImportSearchPath non sécurisée
Propriété | Value |
---|---|
Identificateur de la règle | CA5393 |
Titre | Ne pas utiliser de valeur DllImportSearchPath non sécurisée |
Catégorie | Sécurité |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | Non |
Cause
Utilisation de l’une des valeurs non sécurisées de <xref:System.Runtime.InteropServices.DllImportSearchPath?displayProperty=fullName :
AssemblyDirectory
UseDllDirectoryForDependencies
ApplicationDirectory
LegacyBehavior
Description de la règle
Il peut y avoir une DLL malveillante dans les répertoires de recherche de DLL par défaut et les répertoires d’assembly. Ou, selon l’emplacement d’exécution de votre application, il peut y avoir une DLL malveillante dans le répertoire de l’application.
Pour plus d’informations, consultez Charger la bibliothèque en toute sécurité.
Comment corriger les violations
Utilisez les valeurs sécurisées de DllImportSearchPath pour spécifier un chemin de recherche explicite à la place :
SafeDirectories
System32
UserDirectories
Quand supprimer les avertissements
Vous pouvez sans risque supprimer cette règle dans les situations suivantes :
- Vous êtes sûr que l’assembly chargé est ce que vous voulez.
- L’assembly importé est un assembly système couramment utilisé, comme user32.dll, et la stratégie de chemin de recherche suit le mécanisme DLL connu.
Supprimer un avertissement
Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.
#pragma warning disable CA5393
// The code that's violating the rule is on this line.
#pragma warning restore CA5393
Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none
dans le fichier de configuration.
[*.{cs,vb}]
dotnet_diagnostic.CA5393.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.
Configurer le code à analyser
Utilisez l’option suivante pour configurer les parties de votre codebase sur lesquelles exécuter cette règle.
Vous pouvez configurer cette option pour cette règle uniquement, pour toutes les règles auxquelles elles s’appliquent ou pour toutes les règles de cette catégorie (Sécurité) auxquelles elles s’appliquent. Pour plus d’informations, consultez Options de configuration des règles de qualité du code.
Bits DllImportSearchPath non sécurisés
Vous pouvez configurer quelle valeur de DllImportSearchPath est non sécurisée pour l’analyse. Par exemple, pour spécifier que le code doit utiliser AssemblyDirectory
, UseDllDirectoryForDependencies
ou ApplicationDirectory
, ajoutez la paire clé-valeur suivante à un fichier .editorconfig dans votre projet :
dotnet_code_quality.CA5393.unsafe_DllImportSearchPath_bits = 770
Vous devez spécifier la valeur entière d’une combinaison de bits des valeurs de l’énumération.
Exemples de pseudo-code
using System;
using System.Runtime.InteropServices;
class ExampleClass
{
[DllImport("The3rdAssembly.dll")]
[DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
public void ExampleMethod()
{
MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
}
}
Solution
using System;
using System.Runtime.InteropServices;
class ExampleClass
{
[DllImport("The3rdAssembly.dll")]
[DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
public void ExampleMethod()
{
MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
}
}
Règles associées
CA5392 : utilisez l’attribut DefaultDllImportSearchPaths pour P/Invokes