CA2126: 형식 링크 요청에는 상속 요청이 필요합니다.
TypeName |
TypeLinkDemandsRequireInheritanceDemands |
CheckId |
CA2126 |
범주 |
Microsoft.Security |
변경 수준 |
주요 변경 |
원인
public unsealed 형식이 링크 요청으로 보호되고, 재정의 가능한 메서드가 있으며, 형식과 메서드가 모두 상속 요청으로 보호되지 않습니다.
규칙 설명
메서드 또는 해당 선언 형식에 링크 요청을 적용하려면 메서드의 직접 실행 호출자에 지정된 권한이 있어야 합니다. 메서드에 상속 요청을 적용하려면 재정의 메서드에 지정된 권한이 있어야 합니다. 형식에 상속 요청을 적용하려면 파생 클래스에 지정된 권한이 있어야 합니다.
위반 문제를 해결하는 방법
이 규칙의 위반 문제를 해결하려면 형식이나 메서드를 링크 요청과 동일한 권한의 상속 요청으로 보호합니다.
경고를 표시하지 않는 경우
이 규칙에서는 경고를 표시해야 합니다.
예제
다음 예제에서는 규칙을 위반하는 형식을 보여 줍니다.
Imports System
Imports System.Security.Permissions
Namespace SecurityLibrary
<EnvironmentPermission(SecurityAction.LinkDemand, Read:="PATH")> _
Public Class TypesWithLinkDemands
Protected Overridable Sub UnsecuredMethod()
End Sub
<EnvironmentPermission(SecurityAction.InheritanceDemand, Read:="PATH")> _
Protected Overridable Sub SecuredMethod()
End Sub
End Class
End Namespace
using System;
using System.Security.Permissions;
namespace SecurityLibrary
{
[EnvironmentPermission(SecurityAction.LinkDemand, Read = "PATH")]
public class TypesWithLinkDemands
{
public virtual void UnsecuredMethod() {}
[EnvironmentPermission(SecurityAction.InheritanceDemand, Read = "PATH")]
public virtual void SecuredMethod() { }
}
}
using namespace System;
using namespace System::Security::Permissions;
namespace SecurityLibrary
{
[EnvironmentPermission(SecurityAction::LinkDemand, Read = "PATH")]
public ref class TypesWithLinkDemands
{
protected:
virtual void UnsecuredMethod() {}
[EnvironmentPermission(SecurityAction::InheritanceDemand,
Read = "PATH")]
virtual void SecuredMethod() {}
};
}
관련 규칙
CA2108: 값 형식에서 선언적 보안을 검토하십시오.
CA2112: 보안 형식은 필드를 노출하면 안 됩니다.
CA2122: 링크 요청이 있는 메서드를 간접적으로 노출하지 마십시오.
CA2123: 재정의 링크 요청은 기본 형식의 링크 요청과 같아야 합니다.