다음을 통해 공유


CA2140: 투명 코드는 보안에 중요한 항목을 참조해서는 안 됩니다.

TypeName

TransparentMethodsMustNotReferenceCriticalCode

CheckId

CA2140

범주

Microsoft.Security

변경 수준

주요 변경

원인

투명 메서드:

  • 보안에 중요한 보안 예외 형식을 처리합니다.

  • 보안에 중요한 형식으로 표시된 매개 변수가 있습니다.

  • 보안에 중요한 제약 조건이 있는 제네릭 매개 변수가 있습니다.

  • 보안에 중요한 형식의 지역 변수가 있습니다.

  • 보안에 중요한 것으로 표시된 형식을 참조합니다.

  • 보안에 중요한 것으로 표시된 메서드 호출

  • 보안에 중요한 것으로 표시된 필드를 참조합니다.

  • 보안에 중요한 것으로 표시된 형식을 반환합니다.

규칙 설명

SecurityCriticalAttribute 특성으로 표시된 코드 요소는 보안에 중요합니다. 투명 메서드는 보안에 중요한 요소를 사용할 수 없습니다. 투명 형식이 보안에 중요한 형식을 사용하려고 시도하는 경우 TypeAccessException, MethodAccessException 또는 FieldAccessException이 발생합니다.

위반 문제를 해결하는 방법

이 규칙의 위반 문제를 해결하려면 다음 중 하나를 실행하십시오.

경고를 표시하지 않는 경우

이 규칙에서는 경고를 표시해야 합니다.

예제

다음 예제에서는 투명 메서드는 보안에 중요한 제네릭 컬렉션, 보안 중요 필드 및 보안 중요 메서드를 참조하려고 시도합니다.

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