2011-11-25 4 views
1

ABAP 프로그램을 작성하는 데있어 다음 방법론이 나에게 프로그램에 대한 '종료'로 알려져 있기 때문에 이에 따라 이름을 선택합니다. extern 인터페이스 구현의 실행 허용 : 위험 요소는 무엇입니까?

1) 인터페이스

namespace Exits { 
    public interface Exit { 
     int exitMethod(string s); // signature serves as example only 
    } 
} 

2) 작성된 사용자의 이름을 전달하는 응용 프로그램의 사용자에게 몇 가지 방법을 제공을 정의, 닷넷, 당신을 가정 조립 ExitImplementation.dll 및 클래스 이름 (예 : myClass : exit)을 사용하여 인터페이스 exit를 구현합니다. 예 : 명령 줄 매개 변수 또는 일부 형식으로.

당신은 그것을 실행 string assemblyName에서 사용자 어셈블리의 이름과 string theImplementation의 클래스 (포함 네임 스페이스)의 이름을 저장하고로드 :

Assembly assembly = Assembly.LoadFrom(assemblyName); 
     // assuming assembly is deployed by user into folder where application resides 
    Exit theExitImplementation = assembly.CreateInstance(theImplementation) as Exit; 

    int k = theExitImplementation.exitMethod("whatever"); 

(첫 번째 질문

3)

이 기술의 이름은 ABAP 세계 바깥에 있으며 그 이름은 무엇입니까? :-))

내가 알고 싶은 것은 응용 프로그램에서이 작업을 실행하게하여 어떤 위험을 감수하고 있는지입니다. 사용자 코드 (용서 나에게 순진한 질문 인 경우에, 나는 여전히 .net에 익숙하다.) 출력이 일부 로그에 대한 일부 메시지 출력을 결정하는 데 필요한 일부 메시지 코드라고 가정 해 봅시다.

배포 시나리오로는 회사에서 업무를 수행하기 위해 응용 프로그램을 사용하고 해당 회사의 일부 직원이 종료 구현을 작성한다고 가정합니다. 해당 직원이 손상을 입히려한다면 어떤 위험에 처할 수 있습니까?

  1. 로그에 잘못된 메시지가 있습니까?
  2. 응용 프로그램의 클래스 인스턴스 내용?
  3. 응용 프로그램이 실행되고있는 PC의 리소스가 있습니까?
  4. 더 나빠요?

대답은 4입니다. 그렇지 않습니까? myClass는 oppurtunity가 실행되도록하므로 기본적으로 모든 응용 프로그램이 원래 응용 프로그램을 실행하는 사용자가 시작한 작업을 수행 할 수 있습니다. 이것을 방지 할 수있는 방법이 있습니까?

만약 그렇다면 : 어떤 차이가 있습니까? (있는 경우) 이탈의 서명이 고정되어 있으며 메소드의 입력을 메소드에서 변경할 수 없습니까? 의도에 의한이 메서드는 형식을 동적으로 정의 할 수 없습니다.

이 방법은 또한 의도적으로 변경할 수없는 입력 만 허용합니다. 문자열 인수가 호출자가 수정할 수있는 StringBuilder와 같은 다른 유형으로 대체되었다고 가정합니다. 이것은 위험을 증가 시키는가?

이 접근법으로 위험을 줄이기 위해보다 정교한 (표준) 기법이 있습니까? 다른 접근법이 있습니까?

+0

ABAP 란 무엇입니까? – renatoargh

+1

Hrmmm. ABAP은 SAP 세계의 프로그래밍 언어입니다. – Thomas

+0

ABAP 용 태그도 있습니다 :-) – Thomas

답변

1

보안 메서드없이 외부의 신뢰할 수없는 메서드를 호출하는 경우 호출 된 메서드 서명 (일반적으로)은 중요하지 않습니다.

GAC/신뢰할 수있는 코드에서 신뢰할 수없는 코드를 호출하여 노출되는 노출 영역을 최소화하려면 최대한 많은 수의 SecurityPermissions을 취소해야합니다. this tutorial을보고 .NET Security가 어떻게 작동하는지 일반적인 아이디어를 얻으십시오. 다음은 외부 코드가 초래할 수있는 파괴적인 행동을 처리해야합니다.

NamedPermissionSet ps = new NamedPermissionSet("Nothing"); 
ps.Deny(); 
CallYourUnsafeMethodHere(); 
CodeAccessPermission.RevertAll(); 
+0

감사합니다.이 태그는 나에게 추가 조사를위한 출발점을 제공 할 것입니다! – Thomas