CA5375: Nie używaj sygnatury dostępu współdzielonego konta

Właściwości Wartość
Identyfikator reguły CA5375
Stanowisko Nie używaj sygnatury dostępu współdzielonego konta
Kategoria Bezpieczeństwo
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Nie.

Przyczyna

Generowanie sygnatury dostępu współdzielonego konta za pomocą GetSharedAccessSignature metody w Microsoft.WindowsAzure.Storage przestrzeni nazw.

Opis reguły

Sygnatura dostępu współdzielonego konta może delegować dostęp do operacji odczytu, zapisu i usuwania w kontenerach obiektów blob, tabelach, kolejkach i udziałach plików, które nie są dozwolone przy użyciu sygnatury dostępu współdzielonego usługi. Nie obsługuje jednak zasad na poziomie kontenera i ma mniejszą elastyczność i kontrolę nad przyznanymi uprawnieniami. Jeśli to możliwe, użyj sygnatury dostępu współdzielonego usługi do szczegółowej kontroli dostępu. Aby uzyskać więcej informacji, zobacz Delegowanie dostępu za pomocą sygnatury dostępu współdzielonego.

Jak naprawić naruszenia

Użyj sygnatury dostępu współdzielonego usługi zamiast sygnatury dostępu współdzielonego konta w celu uzyskania szczegółowej kontroli dostępu i zasad dostępu na poziomie kontenera.

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć tę regułę, jeśli masz pewność, że uprawnienia wszystkich zasobów są tak ograniczone, jak to możliwe.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

#pragma warning disable CA5375
// The code that's violating the rule is on this line.
#pragma warning restore CA5375

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

[*.{cs,vb}]
dotnet_diagnostic.CA5375.severity = none

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Przykłady przykładów kodu przykładowego

Naruszenie

Obecnie poniższy przykład pseudo-kodu ilustruje wzorzec wykryty przez tę regułę.

using System;
using Microsoft.WindowsAzure.Storage;

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

Rozwiązanie

Zamiast sygnatury dostępu współdzielonego konta użyj sygnatury dostępu współdzielonego usługi.

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: Użyj funkcji SharedAccessProtocol HttpsOnly

CA5377: Użyj zasad dostępu na poziomie kontenera