JDK에 내장 된 자바 스크립트 인터프리터 실행하는 데 신뢰할 수없는 스크립트 (javax.script의를. *)하는 그러나 기본적으로 인터프리터는 모든 Java 클래스에 대한 액세스를 허용합니다. 예를 들어 스크립트의 "java.lang.System.exit(0)
"은 JVM을 종료합니다. 필자는 이것이 "라이브 연결"이라고 생각합니다. 자세한 내용은 Sun의 "Java Scripting Programmer 's Guide"를 참조하십시오.어떻게</p> <p>잠글 (또는 샌드 박스) 우리는 자바 응용 프로그램이 있고 자바 스크립트 인터프리터 내장하여 신뢰할 수없는 코드를 실행하고 싶은
즉 나는 단지 스크립트가 내가 특별히 ScriptEngine
에 eval()
또는 put()
방법을 사용하여 주입 개체에 액세스 할 수 있어야합니다.
나는 그러나이 방법은 같은 태양 내부 클래스를 사용하지 않고 JDK 1.6에서 가능하지 않다 예를 들어 http://codeutopia.net/blog/2009/01/02/sandboxing-rhino-in-java/
를 참조 인터프리터 (코뿔소)의 이전 독립 실행 형 버전과이를 달성하는 방법에 대한 몇 가지 문서를 발견했다 ClassShutter 등은 모두 내부적으로 설정되어 있으며 공용 메서드로 재정의 할 수 없습니다.
사용자 정의 SecurityManager, ClassLoader 등을 사용하여 복잡한 후프를 뛰어 넘지 않아도되지만 아무것도 찾을 수 없었던 간단한 방법이 필요합니다.
다른 응용 프로그램에서 Javascript를 둘러싼 보안 게시판의 빈도가 높아지면 라이브 연결을 해제하는 간단한 플래그가 나타납니다.
항목 : http://stackoverflow.com/questions/1347099/how-do-i-secure-scripts -run-using-javax-scripting – McDowell
2014 년에도 여전히 Live Connect for Java의 ScriptEngine을 사용하지 못하게하는 방법이 없다고 생각합니다. 나는 액세스를 제한하는 쉬운 방법을 찾기 위해 행운없이 검색하고 검색했습니다.JSR 223을 사용하여 자바 스크립트를 제공하고 "java.awt.Desktop.getDesktop()'"또는 "java.lang.System.exit"과 같은 것을 비활성화 할 수 없도록 클라이언트를 파싱 할 수 있어야하는 서버 측 응용 프로그램을 배포하고 있습니다. (0)''구현하기가 불가능합니다. – chrixm