JEXL 스크립트를 실행하기위한 샌드 박스를 만들어서 악의적 인 사용자가 액세스 권한을 부여한 변수 외부의 데이터에 액세스 할 수 없으며 서버에서 DOS 공격을 수행 할 수도 없습니다. 나는 이것을 다른 사람에게도 문서화하고 다른 사람들의 의견을 접근법에 넣고 싶습니다.안전한 JEXL (스크립팅) 샌드 박스는 어떻게 만듭니 까?
다음은 내가 그 알고 있어요 것들의 목록이 해결 될 필요가있다 :
- 만 화이트리스트에있는 그 '새'를 사용하여 클래스를 인스턴스화 할 수 있습니다.
- forName을 호출 할 수 있고 모든 클래스에 액세스 할 수 있으므로 모든 클래스에서 getClass 메서드에 액세스 할 수 없도록 설정하십시오.
- 파일과 같은 리소스에 대한 액세스를 제한합니다.
- 표현식이 실행되는 데 일정한 시간 만 허용되므로 소비하는 리소스의 양을 제한 할 수 있습니다.
이 JEXL 적용되지 않지만 사용하는 스크립트 언어에 적용 할 수 있습니다 finalize 메소드가 종료 자 스레드에서 호출되기 때문에
- 사용자 정의 finalize 메소드를 가지고 객체를 허용하지 않음 객체를 생성 해, 그 객체 내의 코드를 실행하기 위해서 (때문에) 사용 된 AccessControlContext 대신에, 원래의 AccessControlContext로 실행됩니다.