2014-05-09 7 views
2

C# 4.0 이상에서는 메소드 속성을 기반으로 메소드의 허용 호출자를 제한하는 좋은 방법이 있습니까?메소드의 허용 호출자를 제한하는 방법은 무엇입니까?

나는 이것이 CAS에 관한 것이 아니라고 생각했다. 이제 .NET 4.0의 변경 사항은 새 CAS가 어셈블리 수준에서만 적용되며 샌드 박스가 적용된 응용 프로그램에서만 적용됩니다. 내가 무엇을하고 있는지. 이 같은

내가 상상 해요 뭔가 :

[MyDangerousPermission] 
public void DoSomethingDangerous() 
{ 
    . . . 
} 

다른 클래스 또는 어셈블리의

: DoSomethingDangerous()에 어딘가에 호출 스택에 [MyDangerousDemand] 없이

[MyDangerousDemand] 
public void AllowedCaller() 
{ 
    DoSomethingDangerous(); 
} 

하고, 모든 호출 것 실패 (예 : SecurityException).

불가능합니다.

(내 주요 응용 프로그램은 중요한 경우 웹 응용 프로그램에 있습니다.)

+0

CAS는 웹 앱을 보호 할 의도가 전혀 없었으며 신뢰할 수없는 코드로부터 보호하기 위해 만들어졌습니다. 사용자가 웹 서버에 코드를 업로드하도록 허용하는 것은 현명하지 못합니다. 하지만 가능하면 하나의 방법이 아니라 업로드하는 전체 어셈블리를 불신하게 될 것입니다. 자신의 코드를 신뢰할 수 없다면 더 큰 문제가 발생할 것입니다. 당신이 단순히 잘못된 구석에서보고있는 높은 확률. –

+0

내 앱에는 업로드 된 코드가 포함되어 있지 않습니다. 그것은 내가 보호하려고하는 시나리오가 아닙니다. – RickNZ

답변

0

우리는 아직도 당신이 specicy로 CAS를 사용하고 아무런 문제가 발생하지 않았습니다. PrincipalPermissionAttribute을보십시오.

그러나 웹 응용 프로그램 인 경우 사용중인 프레임 워크에서 만든 속성 중 하나를 사용해야합니다. ASP.NET MVC의 경우 AuthorizeAttribute이라고합니다. 즉 비즈니스 계층이 아닌 최상위 계층에서 권한 부여를 수행합니다.

+0

'AuthorizeAttribute'는이 응용 프로그램에서 작동하지 않습니다. 시스템에는 익명의 사용자 만 있습니다. 아무도 "허가"를받지 못했습니다. – RickNZ

+0

아무도 승인되지 않은 경우 어떻게 CAS를 사용할 것으로 기대합니까? – jgauffin

+0

"Permission"속성이있는 경우 호출 스택을 걸어보고 호출자 중 하나와 일치하는 "Demand"속성이 있는지 살펴야합니다. 이 아이디어는 주로 프로그래밍 또는 정책 오류를 포착하기 위해 중요한 코드에 대한 액세스를 소수의 호출자에게만 제한하는 것입니다. – RickNZ