다음을 통해 공유


종속성 속성 보안

종속성 속성은 일반적으로 public 속성으로 간주됩니다. WPF(Windows Presentation Foundation) 속성 시스템의 특성 때문에 종속성 속성 값에 대한 보안을 보장할 수 없습니다.

래퍼 및 종속성 속성의 액세스 및 보안

일반적으로 종속성 속성은 인스턴스에서 속성 가져오기 또는 설정을 간단하게 하는 "래퍼" CLR(공용 언어 런타임) 속성과 함께 구현됩니다. 그러나 래퍼는 종속성 속성과 상호작용할 때 사용하는 기본 GetValueSetValue 정적 셀을 구현하는 편리한 메서드일 뿐입니다. 또 다른 측면에서 볼 때 속성은 private 필드가 아닌 종속성 속성에서 지원하는 CLR(공용 언어 런타임) 속성으로 노출됩니다. 래퍼에 적용되는 보안 메커니즘은 속성 시스템 동작 및 기본 종속성 속성의 액세스와 관련이 없습니다. 래퍼에 보안 요구를 배치하면 편의성 메서드만 사용할 수 없게 되며 GetValue 또는 SetValue에 대한 호출은 사용할 수 있습니다. 마찬가지로 래퍼에 보호된 액세스 또는 개인 액세스 수준을 적용해도 효과적인 보안을 제공하지는 않습니다.

고유한 종속성 속성을 작성하려는 경우 래퍼와 DependencyProperty 식별자 필드를 public 멤버로 선언하여 호출자가 종속성 속성으로 구현되는 저장소로 인해 해당 속성의 실제 액세스 수준에 대해 잘못된 정보를 가져오지 않도록 해야 합니다.

사용자 지정 종속성 속성의 경우 속성을 읽기 전용 종속성 속성으로 등록할 수 있습니다. 이렇게 하면 해당 속성의 DependencyPropertyKey에 대한 참조를 보유하지 않는 다른 사용자에 의해 속성이 설정되는 것을 방지하는 효과적인 방법을 제공할 수 있습니다. 자세한 내용은 읽기 전용 종속성 속성을 참조하세요.

참고

DependencyProperty 식별자 필드를 private으로 선언할 수 있으며 사용자 지정 클래스의 바로 노출되는 네임스페이스를 줄이는 데 사용할 수 있지만 CLR(공용 언어 런타임) 언어 정의에서 해당 액세스 수준을 정의하므로 이러한 속성은 동일한 의미에서 "private"으로 간주하면 안 됩니다. 그 이유는 다음 섹션에 설명되어 있습니다.

종속성 속성의 속성 시스템 노출

DependencyProperty를 public이 아닌 다른 액세스 수준으로 선언하는 것은 일반적으로 유용하지 않으며 오류가 발생할 수도 있습니다. 해당 액세스 수준 설정은 다른 사용자가 선언하는 클래스에서 인스턴스에 대한 참조를 가져올 수 없도록만 합니다. 그러나 DependencyProperty를 클래스의 인스턴스나 파생 클래스 인스턴스에 있는 특정 속성을 식별하는 방법으로 반환하는 여러 측면의 속성 시스템이 있으며 이 식별자는 원래 정적 식별자가 public이 아닌 것으로 선언되는 경우에도 SetValue 호출에서 사용할 수 있습니다. 또한 OnPropertyChanged 가상 메서드는 값을 변경한 모든 기존 종속성 속성의 정보를 수신합니다. 그리고 GetLocalValueEnumerator 메서드는 로컬로 설정된 값을 가진 인스턴스에 있는 모든 속성의 식별자를 반환합니다.

유효성 검사 및 보안

ValidateValueCallback에 요청을 적용하고 요청 실패 시 유효성 검사 오류로 인해 속성이 설정되지 않도록 하는 것은 적절한 보안 메커니즘이 아닙니다. 악의적인 호출자가 애플리케이션 도메인 내에서 작동하는 경우, ValidateValueCallback을 통해 적용되는 값 설정 무효화는 악의적인 호출자에 의해 표시되지 않을 수도 있습니다.

참고 항목