내 앱이 JSON 파일에서 읽는 신뢰할 수없는 사용자의 표현식을 평가하도록합니다. 예 :샌드 박스에서 사용자 표현식을 평가하는 방법
value = "(getTime() == 60) AND isFoo('bar')"
여기 StackOverflow에서 많은 스레드를 발견했습니다. 일반적으로 자바 스크립트를 읽을 수있는 자바 자신의 ScriptEngine 클래스를 사용하여 추천합니다. 또는 JEXL, MVEL 또는이 목록의 다른 라이브러리와 같은 기존 라이브러리를 사용하도록 사용자에게 권장 : http://java-source.net/open-source/expression-languages
하지만 모두 신뢰할 수있는 사용자 (예 : 사용자가 직접 작성한 구성 파일 및 스크립트를 작성하고 싶습니다.) 하지만 제 경우에는 표현식 평가가 안전한 샌드 박스에서 실행되기를 바랍니다. 따라서 사용자는 같은 간단한 수행 할 수 없습니다
value = "while(true)" // or
value = "new java.io.File(\"R:/t.txt\").delete()" // this works on MVEL
을 그리고 내 응용 프로그램, 또는 액세스 원치 않는 리소스를 잠급니다.
1) 따라서 기존 라이브러리를 쉽게 구성하여 안전한 상자에서 실행할 수 있습니까? '쉽게', 내 자신의 표현식 평가기를 쓰는 것보다 빠르게 사용할 수있는 상위 수준 구성 API를 의미합니다. 저의 연구를 조금 해본 후에, JEXL과 MVEL은 모두 외면한 것처럼 보입니다.
2) 매우 간단하여 신뢰할 수없는 사용자가 악용 할 수없는 기존 표현식 언어가 있습니까? 내가 찾은 모든 것들은 매우 복잡하며 루프, import 문 등을 구현합니다. 수학, 논리 연산자 및 정의 된 변수와 메서드를 구문 분석하면됩니다. 그 이상은 내 범위 밖에 있습니다.
3) 유일한 해결책은 내 표현식 평가기를 작성하는 것이고 일관된 보안 모델을 작성하는 방법에 대한 지침은 어디에서 찾을 수 있습니까? 필자는 이것에 익숙하지 않으며 코드 삽입에 사용되는 일반적인 트릭이 무엇인지 알지 못합니다. 그래서 나는 이것을 독자적으로 쓰지 않아도되고 싶었습니다.
(신뢰할 수없는 Java 코드의 약간 어렵게 상황을 다루는) 다음과 같은 질문에서 유용한 정보가있을 수 있습니다 : http://stackoverflow.com/questions/9041446/what-of-the-the-the-the-the-the-the-the-the-the-the-the-the-the-the-the-run-user-supplied-ja/9041423 # 9041423 – DNA
이 질문에 대한 답변을 얻었습니까? – ccleve
나를 만족시킬만한 것은 없습니다. 나는 그것을 내 자신으로 만들고 그것을 배우기로 결심했다. – VIBrunazo