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);
    }
}

CA5392 : utilisez l’attribut DefaultDllImportSearchPaths pour P/Invokes