CS.SV.CRITICAL_CONST
セキュリティクリティカルな定数は透過的でなければなりません。
実行時にルックアップが不要になるように、コンパイラは定数値をインライン化するため、透過性の強制は定数値には実施されません。コードレビュー担当者が透過的なコードが定数にアクセスできないと想定しないように、定数フィールドはセキュリティ的に透過的である必要があります。
軽減と防止
この規則の違反を修正するには、フィールドまたは値から 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;
}
}
この例では、列挙値 EnumWithCriticalValues.CriticalEnumValue と定数 CriticalConstant がこの警告を発生しています。この指摘を修正するには、[SecurityCritical] 属性を削除して、セキュリティを透過的にします。