CA5375: No usar la firma de acceso compartido de la cuenta

Propiedad Value
Identificador de la regla CA5375
Título No usar la firma de acceso compartido de la cuenta
Categoría Seguridad
La corrección interrumpe o no interrumpe Poco problemático
Habilitado de forma predeterminada en .NET 8 No

Causa

Generar una Firma de acceso compartido (SAS) de cuenta con el método GetSharedAccessSignature bajo el espacio de nombres Microsoft.WindowsAzure.Storage.

Descripción de la regla

Una SAS de cuenta puede delegar el acceso para leer, escribir y eliminar operaciones en contenedores de blobs, tablas, colas y recursos compartidos de archivos que no están permitidos con SAS de servicio. Sin embargo, no es compatible con las directivas de nivel de contenedor y tiene menos flexibilidad y control sobre los permisos que se conceden. Si es posible, use una SAS de servicio para el control de acceso específico. Para obtener más información, consulte Delegar el acceso con una firma de acceso compartido.

Cómo corregir infracciones

Use la SAS de servicio en lugar de la SAS de cuenta para el control de acceso detallado y la directiva de acceso de nivel de contenedor.

Cuándo suprimir las advertencias

Es seguro suprimir esta regla si sabe con seguridad que los permisos de todos los recursos están lo más restringidos posible.

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.

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

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none del archivo de configuración.

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

Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.

Ejemplos de pseudocódigo

Infracción

Actualmente, el pseudocódigo de ejemplo siguiente muestra el patrón que detecta esta regla.

using System;
using Microsoft.WindowsAzure.Storage;

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

Solución

En lugar de una SAS de cuenta, use una SAS de servicio.

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 HttpsOnly con SharedAccessProtocol

CA5377: Usar una directiva de acceso de nivel de contenedor