현재이 프로젝트에 대한 사용자 지정 코드 액세스 보안 솔루션을 빌드하려고합니다. 사용자 지정 코드 액세스 보안을위한 IPermission 구현
그러므로 나는 같이 사용되어야 CustomPermissionAttribute 생성 :[CustomPermissionAttribute(SecurityAction.Demand, Permission="PermMethodABC")]
public void MethodABC()
{
}
속성의 CreatePermission()
작성하는 방법을 새로운 CustomPermission 인스턴스를 반환한다.
CustomPermission 클래스의 수요 방법
는 Thread.Current.CurrentPrincipial에 내 사용자 정의에 대해 IPrincipial 구현의 보안을 확인해야 다음 이 "조립 A"를 서명에public sealed class CustomPermission : IPermission
{
private string _RequiredPermission;
...
public void Demand()
{
ICustomPrincipial _pr = Thread.Current.CurrentPrincipial as ICustomPrincipial;
if (_pr == null) throw...
if (!_pr.HasPermission(_RequiredPermission)) throw...
}
}
public interface ICustomPrincipial : IPrincipial
{
bool HasPermission(string RequiredPermission);
}
은 위의 모든입니다.
부호 조립 B는 어셈블리의 ICustomPrincipial를 구현하는 다음 CustomPrincipial 구현을 포함
public sealed class CustomPrincipial : ICustomPrincipial
{
User _User;
...
public bool HasPermission(string RequiredPermission)
{
if (_User has permission defined with "PermMethodABC") ...
return true/false;
}
...
}
(이제 조립 A는 사용자 유형에 대해 알이 난에 CustomPrincipial 클래스를 배치합니다. 어셈블리 A, 그러면 사용자 물건을 가진 모든 어셈블리에도 서명해야합니다. 그렇지 않으면 어셈블리 A를 컴파일 할 수 없습니다.
응용 프로그램 시작시 CustomPrincipial의 새 인스턴스가 Thread.Current.CurrentPrincipial에 할당됩니다.
두 질문 :
이 어셈블리의 공개 ICustomPermission 인터페이스로 인한 문제를 saftey 수 있을까요?
모든 IPermission 멤버를 완전히 구현해야합니까? 특히 ToXML과 FromXML 메소드 ... 런타임에 MethodABC()에 액세스 할 때마다 CreatePermission() 메소드가 호출됩니다.
편집 : 등록 1 : 나는 다음과 같은 상황을 생각하고있다 "조립 C 것은"는 CustomPermissionAttribute로 보호 MethodXY가 포함되어 있습니다. 이 보호 된 메서드에 액세스하려면 공격자가 Assembly A & Assembly C에 대한 참조를 만들고 어셈블리 A의 공용 ICustomPrinciial 인터페이스 (-> HasPermission()이 항상 true를 반환 함)를 구현할 수있는 새 응용 프로그램을 만들 수 있습니다. 그는 자신의 Thread.Current.CurrentPrincipial에 구현의 인스턴스를 할당 할 수 있습니다. Assembly A의 Demand() Method가 Thread.Current.CurrentPrincipial을 검사하면 공격자가 MethodXY에 액세스 할 수 있습니다. 그게 가능한 상황일지도 몰라 ..!?
안전에 따르면 : 나는 위의 게시물에서 가능한 상황을 언급했다. IPermission에 따르면 : 정상적인 작업 중에는 IsSubsetOf() 및 Demand()가 호출됩니다. – Christian