CA5375: Não use assinatura de acesso compartilhado de conta

Propriedade valor
ID da regra CA5375
Cargo Não use a assinatura de acesso compartilhado da conta
Categoria Segurança
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 8 Não

Causa

Gerando uma conta Assinatura de Acesso Compartilhado (SAS) com o método sob o GetSharedAccessSignatureMicrosoft.WindowsAzure.Storage namespace.

Descrição da regra

Uma SAS de conta pode delegar acesso a operações de leitura, gravação e exclusão em contêineres de blob, tabelas, filas e compartilhamentos de arquivos que não são permitidos com uma SAS de serviço. No entanto, ele não oferece suporte a políticas no nível de contêiner e tem menos flexibilidade e controle sobre as permissões concedidas. Se possível, use uma SAS de serviço para controle de acesso refinado. Para obter mais informações, consulte Delegar acesso com uma assinatura de acesso compartilhado.

Como corrigir violações

Use uma SAS de serviço em vez de uma SAS de conta para controle de acesso refinado e política de acesso no nível de contêiner.

Quando suprimir avisos

É seguro suprimir essa regra se você tiver certeza de que as permissões de todos os recursos são tão restritas quanto possível.

Suprimir um aviso

Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.

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

Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.

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

Para obter mais informações, consulte Como suprimir avisos de análise de código.

Exemplos de pseudocódigo

Violação

No momento, o exemplo de pseudocódigo a seguir ilustra o padrão detetado por essa regra.

using System;
using Microsoft.WindowsAzure.Storage;

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

Solução

Em vez de SAS de conta, use SAS de serviço.

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: Usar SharedAccessProtocol HttpsOnly

CA5377: Usar política de acesso em nível de contêiner