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] 属性を削除して、セキュリティを透過的にします。