클래스 프로젝션 및 프로젝션 클래스

2363 단어
이 게시물의 목적은 오랫동안 우리가 사용할 수 있었던 강력한 메커니즘에 대한 프로필을 높이고 이를 사용하거나 남용할 수 있는 방법에 대한 토론을 시작하는 것입니다.

메커니즘에 대한 자세한 내용은 InterSystems documentation 에서 읽을 수 있습니다. 요약하면 클래스 정의는 Projection 키워드를 사용하여 하나 이상의 프로젝션 클래스를 참조할 수 있습니다. 프로젝션 클래스는 클래스 수명 주기의 주요 지점에서 호출되는 메서드를 구현할 수 있습니다.

프로젝션 클래스는 확장 %Projection.AbstractProjection 해야 하며 일반적으로 다음 메서드 중 하나 이상을 구현합니다.
  • CreateProjection
  • RemoveProjection
  • CreateProjection는 클래스가 컴파일된 후에 호출됩니다. RemoveProjection는 클래스가 다시 컴파일되기 직전이나 삭제되기 직전에 호출됩니다.

    이 메커니즘의 원래 용도 중 하나는 InterSystems 클래스의 Java 프로젝션을 구현하는 Java 파일을 생성하는 것이었습니다. 그 이후로 더 광범위하게 사용되고 더 정교해졌습니다. InterSystems IRIS 2021.1에서 %Projection.AbstractProjection 에서 파생된 26개의 % 클래스를 찾았습니다.

    InterSystems가 메커니즘을 사용하는 방법 외에도 다른 방법으로 악용되는 것을 보았습니다. 다음은 몇 가지 예입니다.

  • UMLExplorer 4개의 클래스가 포함된 XML 파일로 제공됩니다. 그 중 하나가 ClassExplorer.WebAppInstaller 라는 프로젝션 클래스로, 독창적으로 자체 투영합니다.

  • Class ClassExplorer.WebAppInstaller Extends %Projection.AbstractProjection
    {
    
    Projection Reference As WebAppInstaller;
    ...
    


    따라서 이 클래스가 컴파일되면 CreateProjection 메서드가 실행되어 개발자가 코딩한 모든 단계를 수행합니다. 이 경우/CacheExplorer라는 웹 응용 프로그램을 추가하지만 클래스를 컴파일하는 사람의 권한이 허용하는 모든 작업을 수행할 수 있습니다.
  • 우리 Deltanji source code management tool를 사용하는 사이트에서 유틸리티 프로젝션 클래스를 만들었습니다. 대상 네임스페이스에서 실행하기 위해 일부 설치 단계가 필요한 작업을 배포할 때마다 유틸리티 프로젝션 클래스(P)를 참조하는 프로젝션이 있는 배포 클래스(D)에서 해당 단계를 구현합니다. 그런 다음 그들은 작품과 함께 (D)를 묶습니다. (D)가 대상 네임스페이스에 로드되고 컴파일되면 (P)의 CreateProjection 메서드가 자동으로 호출되고 클래스 이름(D)이 전달되어 (D)의 메서드를 호출할 수 있습니다.

  • 프로젝션이 다른 방식으로 사용되는 것을 보았거나 새로운 용도를 직접 고안했다면 이 게시물에 댓글로 공유해 주세요.

    이 시점에서 한 가지 더 생각합니다. 이 메커니즘은 내용을 신뢰할 수 없는 XML 파일을 가져오는 동안 컴파일하기 전에 두 번 생각해야 함을 의미합니다. 악성 프로젝션 클래스의 범위는 큽니다.

    좋은 웹페이지 즐겨찾기