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