2009-04-08 8 views
5

개발자가 맞춤 Groovy 스크립트 및 프리 마커 템플릿을 업로드 할 수있는 시스템을 개발 중입니다.샌드 박스 Java/Groovy/Freemarker 코드 - 특정 메소드 실행 방지

기본 자바 보안 인프라로 매우 높은 수준의 보안을 제공 할 수 있습니다. 즉 코드가 파일 시스템이나 네트워크에 액세스하지 못하도록 방지 할 수 있지만 특정 방법에 대한 액세스를 제한해야합니다.

내 계획은 Groovy 및 Freemarker 런타임을 수정하여 특정 방법을 화이트리스트 또는 블랙리스트로 표시하는 주석을 읽는 것이지만 코드의 분기 된 버전을 유지해야하므로 바람직하지 않습니다.

Groovy 또는 Freemarker에서 호출 할 때 특정 메소드의 실행을 막을 수 있어야합니다. 나는 콜 스택을 볼 수있는 해킹을 고려해 봤지만 엄청난 속도의 공격이 될 것이다.

다른 사람이 이것을 구현하는 사람이 있습니까?

답변

5

GroovyClassLoader를 서브 클래 싱하고 AST 방문자 내에서 제약 조건을 적용하여이를 수행 할 수 있습니다. 이 글에서는 어떻게하는지 설명합니다 : http://hamletdarcy.blogspot.com/2009/01/groovy-compile-time-meta-magic.html

또한, 거기에 언급 된 코드는 Groovy 1.6 installer의 samples 폴더에 있습니다.

+1

대부분 (대부분의 경우) 메서드가있는 클래스는 컴파일 할 때 알 수 없기 때문에 AST를 분석하는 것은 실제로 작동하지 않습니다. 그래도이게 가장 좋은 대답 이니, 이걸 똑딱 거릴거야. 메타 클래스를 사용하여 적절한 솔루션을 찾지 못했습니다. –

2

OSGi는 위대합니다. 코드를 번들로 분할하고 각 번들이 노출하는 것과 다른 번들을 설정할 수 있습니다. 그게 너에게 도움이 되겠니?

+0

이렇게하면 코드가 특정 메서드를 호출하지 못하도록 제한 할 수 있습니까? –

+0

개념은 번들링과 같습니다. 그런 다음 해당 번들 외부로 메소드 및 재료를 제한 할 수 있습니다. –

+0

엄밀히 말하면 클래스의 특정 메소드가 호출되지 않도록 제한 할 수는 없지만 더 많은 메소드를 사용하여 기본 클래스와 하위 클래스를 작성하고보다 제한적인 기본 클래스에 대한 액세스 만 제공 할 수 있습니다. –

3

kohsuke의 groovy-sandbox 프로젝트를보아야합니다. 이 주제에 대한 그의 blog post here을 살펴보고 해결 방법은 sandboxing이지만 성능 단점이 있는지 확인하십시오.