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