CA2140:透明程式碼不可以參考安全性關鍵項目

型別名稱

TransparentMethodsMustNotReferenceCriticalCode

CheckId

CA2140

分類

Microsoft.Security

中斷變更

中斷

原因

透明方法:

  • 處理安全性關鍵的安全性例外狀況型別

  • 具有標示為安全性關鍵型別的參數

  • 具有含安全性關鍵條件約束的泛型參數

  • 具有安全性關鍵型別的區域變數

  • 參考標示為安全性關鍵的型別

  • 呼叫標記為安全性關鍵的方法

  • 參考標示為安全性關鍵的欄位

  • 傳回標示為安全性關鍵的型別

規則描述

標示 SecurityCriticalAttribute 屬性的程式碼項目具安全性關鍵。 透明方法不能使用安全性關鍵項目。如果透明型別嘗試使用安全性關鍵型別,就會引發 TypeAccessExceptionMethodAccessExceptionFieldAccessException

如何修正違規

若要修正此規則的違規情形,請執行下列其中一項:

隱藏警告的時機

請勿隱藏此規則的警告。

範例

在下列範例中,透明方法會嘗試參考安全性關鍵泛型集合、安全性關鍵欄位,以及安全性關鍵方法。

using System;
using System.Security;
using System.Collections.Generic;

namespace TransparencyWarningsDemo
{

    [SecurityCritical]
    public class SecurityCriticalClass { }

    public class TransparentMethodsReferenceCriticalCodeClass
    {
        [SecurityCritical]
        private object m_criticalField;

        [SecurityCritical]
        private void CriticalMethod() { }

        public void TransparentMethod()
        {
            // CA2140 violation - transparent method accessing a critical type.  This can be fixed by any of:
            //  1. Make TransparentMethod critical
            //  2. Make TransparentMethod safe critical
            //  3. Make CriticalClass safe critical
            //  4. Make CriticalClass transparent
            List<SecurityCriticalClass> l = new List<SecurityCriticalClass>();

            // CA2140 violation - transparent method accessing a critical field.  This can be fixed by any of:
            //  1. Make TransparentMethod critical
            //  2. Make TransparentMethod safe critical
            //  3. Make m_criticalField safe critical
            //  4. Make m_criticalField transparent
            m_criticalField = l;

            // CA2140 violation - transparent method accessing a critical method.  This can be fixed by any of:
            //  1. Make TransparentMethod critical
            //  2. Make TransparentMethod safe critical
            //  3. Make CriticalMethod safe critical
            //  4. Make CriticalMethod transparent
            CriticalMethod();
        }
    }
}

請參閱

參考

SecurityTransparentAttribute

SecurityCriticalAttribute

SecurityTransparentAttribute

SecurityTreatAsSafeAttribute

System.Security