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