次の方法で共有


CA2130: セキュリティ上重要な定数は透過的である必要がある

TypeName

ConstantsShouldBeTransparent

CheckId

CA2130

分類

Microsoft.Security

互換性に影響する変更点

あり

原因

定数フィールドまたは列挙型のメンバーには SecurityCriticalAttribute が適用されています。

規則の説明

実行時に検索の必要がない値がコンパイラのインライン定数に設定されているため、定数値に対して透過性は適用されません。透過的なコードからは定数にアクセスできないとコード レビューアーが考えることがないよう、定数フィールドは透過的セキュリティなフィールドとして定義する必要があります。

違反の修正方法

この規則違反を修正するには、フィールドまたは値から SecurityCritical 属性を削除します。

警告を抑制する状況

この規則による警告は抑制しないでください。

使用例

次の例では、列挙値 EnumWithCriticalValues.CriticalEnumValue と定数 CriticalConstant によってこの警告が発生します。この問題を修正するには、[SecurityCritical] 属性を削除して透過的セキュリティなフィールドとして定義する必要があります。

using System;
using System.Security;

//[assembly: SecurityRules(SecurityRuleSet.Level2)] 
//[assembly: AllowPartiallyTrustedCallers] 

namespace TransparencyWarningsDemo
{

    public enum EnumWithCriticalValues
    {
        TransparentEnumValue,

        // CA2130 violation
        [SecurityCritical]
        CriticalEnumValue
    }

    public class ClassWithCriticalConstant
    {
        // CA2130 violation
        [SecurityCritical]
        public const int CriticalConstant = 21;
    }
}