CA5375 : Ne pas utiliser de signature d’accès partagé au compte

Propriété Value
Identificateur de la règle CA5375
Titre Ne pas utiliser de signature d’accès partagé au compte
Catégorie Sécurité
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Non

Cause

Génération d’une signature d’accès partagé (SAP) de compte avec la méthode GetSharedAccessSignature sous l’espace de noms Microsoft.WindowsAzure.Storage.

Description de la règle

Un compte SAP peut déléguer l’accès aux opérations de lecture, d’écriture et de suppression sur les conteneurs d’objets blob, les tables, les files d’attente et les partages de fichiers qui ne sont pas autorisées avec une SAP de service. Toutefois, il ne prend pas en charge les stratégies au niveau du conteneur et offre moins de flexibilité et de contrôle sur les autorisations accordées. Si possible, utilisez une SAP de service pour un contrôle d’accès affiné. Pour plus d’informations, consultez Déléguer l’accès avec une signature d’accès partagé.

Comment corriger les violations

Utilisez une SAP de service au lieu d’une SAP de compte pour un contrôle d’accès précis et une stratégie d’accès au niveau du conteneur.

Quand supprimer les avertissements

Vous pouvez supprimer cette règle en toute sécurité si vous êtes sûr que les autorisations de toutes les ressources sont aussi restreintes que possible.

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 CA5375
// The code that's violating the rule is on this line.
#pragma warning restore CA5375

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.CA5375.severity = none

Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.

Exemples de pseudo-code

Violation

À présent, le pseudo-code suivant illustre le modèle détecté par cette règle.

using System;
using Microsoft.WindowsAzure.Storage;

class ExampleClass
{
    public void ExampleMethod(SharedAccessAccountPolicy policy)
    {
        CloudStorageAccount cloudStorageAccount = new CloudStorageAccount();
        cloudStorageAccount.GetSharedAccessSignature(policy);
    }
}

Solution

Au lieu de la SAP de compte, utilisez la SAP de service.

using System;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.File;

class ExampleClass
{
    public void ExampleMethod(StorageCredentials storageCredentials, SharedAccessFilePolicy policy, SharedAccessFileHeaders headers, string groupPolicyIdentifier, IPAddressOrRange ipAddressOrRange)
    {
        CloudFile cloudFile = new CloudFile(storageCredentials);
        SharedAccessProtocol protocols = SharedAccessProtocol.HttpsOnly;
        cloudFile.GetSharedAccessSignature(policy, headers, groupPolicyIdentifier, protocols, ipAddressOrRange);
    }
}

CA5376 : utilisez SharedAccessProtocol HttpsOnly

CA5377 : utilisez une stratégie d’accès au niveau du conteneur