보안 검사 재정의
일반적으로 보안 검사는 호출 스택에 있는 모든 호출자를 검사하여 지정된 권한이 각 호출자에게 부여되어 있는지 확인합니다. 그러나 Assert, Deny 또는 PermitOnly를 개별 권한 개체나 권한 집합 개체에서 호출하여 보안 검사 결과를 재정의할 수 있습니다. 스택에 있는 모든 호출자의 권한을 검사하지 않는 경우에도 이 메서드 중에서 호출되는 메서드에 따라 보안 검사에서 성공하거나 실패하게 됩니다.
중요 |
---|
.NET Framework 버전 4에서 런타임 지원은 Deny 및 RevertDeny 권한 요청을 적용하기 위해 제거되었습니다.이러한 요청은 .NET Framework 4 이상을 기반으로 하는 코드에서 사용하면 안 됩니다.이 변경 내용 및 다른 변경 내용에 대한 자세한 내용은 .NET Framework 4의 보안 변경 내용을 참조하십시오. |
한 메서드가 다른 메서드를 호출할 때마다 새 프레임이 호출 스택에 생성되어 호출되는 메서드의 정보를 저장합니다. 생성자를 사용하여 속성에 액세스하는 것은 이 컨텍스트에서는 메서드 호출에 해당합니다. 각 스택 프레임에는 메서드가 Assert, Deny 또는 PermitOnly를 호출한 정보가 들어 있습니다. 호출자가 둘 이상의 Assert, Deny 또는 PermitOnly를 한 메서드 호출에서 사용하면 공용 언어 런타임은 재정의 동작에 영향을 미치는 다음과 같은 처리 규칙을 적용합니다.
스택 워크 동안 하나의 스택 프레임에 동일한 형식이 두 번(Assert에 대한 두 번의 호출) 이상 재정의된 것을 공용 언어 런타임이 발견하면 두 번째 재정의에 의해 예외가 throw됩니다.
한 스택 프레임에 다른 재정의가 있으면 공용 언어 런타임은 PermitOnly, Deny, Assert의 순서로 이러한 재정의를 처리합니다.
재정의를 바꾸려면 우선 적절한 되돌리기 메서드(예: RevertAssert)를 호출한 다음 새로운 재정의를 적용합니다.
참고 |
---|
클래스 생성자 코드는 특정 위치나 특정 컨텍스트에서 실행된다고 보장할 수 없으므로 클래스 생성자에서 스택 워크 재정의가 이루어지면 안 됩니다.클래스 생성자의 호출 스택 상태는 명확하게 정의되지 않으므로 생성자에 있는 스택 워크 재정의에 의해 예기치 않은 또는 원하지 않은 결과가 나타날 수 있습니다. |
응용 프로그램 개발자도 Assert, Deny 또는 PermitOnly를 자주 사용하지는 않지만 구성 요소 및 클래스 라이브러리 개발자는 거의 사용하지 않습니다. 그러나 보안 재정의가 적합한 경우도 있는데, 이에 대해서는 Assert, Deny 및 PermitOnly 항목에서 설명합니다.
참고 |
---|
재정의(Deny, Assert 또는 PermitOnly)를 수행하는 경우 권한을 되돌려 놓아야만 같은 스택 프레임(메서드)에 있는 같은 종류의 재정의를 수행할 수 있습니다.그렇지 않으면 SecurityException이 throw됩니다.예를 들어, 권한 P를 거부할 경우 이 권한을 되돌려 놓아야만 같은 메서드에서 다른 권한 Q를 거부할 수 있습니다. |
재정의를 되돌리려면 다음 표에 나열된 정적 메서드 중 하나를 사용하십시오.
메서드 |
메서드 작업 |
---|---|
현재 프레임의 모든 이전 재정의가 제거되어 더 이상 적용되지 않습니다. |
|
현재 프레임의 이전 Assert가 제거되어 더 이상 적용되지 않습니다. |
|
현재 프레임의 이전 Deny가 제거되어 더 이상 적용되지 않습니다. 이 메서드는 .NET Framework 4에서 사용되지 않습니다. |
|
현재 프레임의 이전 PermitOnly가 제거되어 더 이상 적용되지 않습니다. |