CA5375:请勿使用帐户共享访问签名

属性
规则 ID CA5375
标题 请勿使用帐户共享访问签名
类别 安全性
修复是中断修复还是非中断修复 非中断
在 .NET 8 中默认启用

原因

使用 Microsoft.WindowsAzure.Storage 命名空间下的 GetSharedAccessSignature 方法生成帐户共享访问签名 (SAS)。

规则说明

帐户 SAS 可以委派对 blob 容器、表、队列和文件共享执行读取、写入和删除操作的访问权限,这些是服务 SAS 不能实现的。 但是,它不支持容器级别策略,并且其灵活性和对所授予权限的控制度不高。 如果可能,请使用服务 SAS 实现精细访问控制。 有关详细信息,请参阅使用共享访问签名委托访问权限

如何解决冲突

使用服务 SAS 而不是帐户 SAS 实现精细访问控制和容器级别访问策略。

何时禁止显示警告

如果确定所有资源的权限都尽可能受到限制,可禁止显示此规则的警告。

抑制警告

如果只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用该规则。

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

若要对文件、文件夹或项目禁用该规则,请在配置文件中将其严重性设置为 none

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

有关详细信息,请参阅如何禁止显示代码分析警告

伪代码示例

冲突

目前,下面的伪代码示例演示了此规则可检测的情况。

using System;
using Microsoft.WindowsAzure.Storage;

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

解决方案

请使用服务 SAS,而不是帐户 SAS。

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:使用 SharedAccessProtocol HttpsOnly

CA5377:使用容器级别访问策略