2010-01-27 5 views
7

JDK에 내장 된 자바 스크립트 인터프리터 실행하는 데 신뢰할 수없는 스크립트 (javax.script의를. *)하는 그러나 기본적으로 인터프리터는 모든 Java 클래스에 대한 액세스를 허용합니다. 예를 들어 스크립트의 "java.lang.System.exit(0)"은 JVM을 종료합니다. 필자는 이것이 "라이브 연결"이라고 생각합니다. 자세한 내용은 Sun의 "Java Scripting Programmer 's Guide"를 참조하십시오.어떻게</p> <p>잠글 (또는 샌드 박스) 우리는 자바 응용 프로그램이 있고 자바 스크립트 인터프리터 내장하여 신뢰할 수없는 코드를 실행하고 싶은

어떻게 든 자바 클래스에 액세스하기 위해 스크립트 기능을 해제하고자하는

즉 나는 단지 스크립트가 내가 특별히 ScriptEngineeval() 또는 put() 방법을 사용하여 주입 개체에 액세스 할 수 있어야합니다.

나는 그러나이 방법은 같은 태양 내부 클래스를 사용하지 않고 JDK 1.6에서 가능하지 않다 예를 들어 http://codeutopia.net/blog/2009/01/02/sandboxing-rhino-in-java/

를 참조 인터프리터 (코뿔소)의 이전 독립 실행 형 버전과이를 달성하는 방법에 대한 몇 가지 문서를 발견했다 ClassShutter 등은 모두 내부적으로 설정되어 있으며 공용 메서드로 재정의 할 수 없습니다.

사용자 정의 SecurityManager, ClassLoader 등을 사용하여 복잡한 후프를 뛰어 넘지 않아도되지만 아무것도 찾을 수 없었던 간단한 방법이 필요합니다.

다른 응용 프로그램에서 Javascript를 둘러싼 보안 게시판의 빈도가 높아지면 라이브 연결을 해제하는 간단한 플래그가 나타납니다.

+0

항목 : http://stackoverflow.com/questions/1347099/how-do-i-secure-scripts -run-using-javax-scripting – McDowell

+0

2014 년에도 여전히 Live Connect for Java의 ScriptEngine을 사용하지 못하게하는 방법이 없다고 생각합니다. 나는 액세스를 제한하는 쉬운 방법을 찾기 위해 행운없이 검색하고 검색했습니다.JSR 223을 사용하여 자바 스크립트를 제공하고 "java.awt.Desktop.getDesktop()'"또는 "java.lang.System.exit"과 같은 것을 비활성화 할 수 없도록 클라이언트를 파싱 할 수 있어야하는 서버 측 응용 프로그램을 배포하고 있습니다. (0)''구현하기가 불가능합니다. – chrixm

답변

1

많은 검색을 해본 결과 codeutopia.net의 블로그 샌드 박스 방식과 다른 SecurityManager 솔루션을 사용해 보았는데 만족스럽지 못했습니다. 그런 다음 제 3 자 라이브러리를 가져 오지 않고 JDK 임베디드 Rhino 라이브러리를 기반으로하는 클래스 로더 솔루션이 나왔습니다. 약 200 줄의 코드가 포함 된 두 개의 자바 클래스는 현재 자바 스크립트에만 필요한 나의 가장 간단한 솔루션입니다.

  1. 는 JavaMembers 또는 기타 관련 클래스는 무시됩니다있는 새로운 클래스 로더에 ScriptEngineManager는 번호의 getEngineFactories에 의해
  2. 로드 스크립트 엔진 공장 클래스를 자바 스크립트 스크립트 엔진 팩토리 클래스 이름을 찾습니다.
  3. 반환 된 스크립트 엔진에서로드 된 스크립트 엔진 팩토리 및 평가 스크립트에서 #getScriptEngine을 호출하십시오.

주어진 스크립트에 Java 스크립트가 포함되어 있으면 클래스 로더가 JavaMembers 또는 다른 클래스를로드하고 클래스를 찾을 수없는 예외를 트리거하려고 시도합니다. 이렇게하면 악성 스크립트가 실행되지 않고 무시됩니다.

자세한 내용은 ConfigJSParser.java 및 ConfigJSClassLoader.java 파일을 읽어 보시기 바랍니다 :

https://github.com/webuzz/simpleconfig/tree/master/js/im/webuzz/config