2016-10-21 7 views
0

내가 nashorn 사용하여 사용자가 서버 측에서 파일을 필터링하는 자바 스크립트 함수 정의를 제공 할 수있는 응용 프로그램을 쓰고 있어요 서버 측에서 사용자의 스크립트를 실행/jjs :Nashorn/jjs 보안 :

cat /etc/js/library.js user.js > tmp.js && 
cat /path/to/input.txt | jjs --language=es6 -doe -J-Djava.security.manager tmp.js > /path/to/output.txt && 
rm tmp.js 

나는 사용자가 무한 루프 내 디스크를 채우기 위해 쓸 수 있다는 것을 알고

for(;;) print("#####); 

그러나 읽기/파일 시스템에서 파일을 작성하는 그를 방지하기에 충분 -J-Djava.security.manager입니까?

감사합니다.

답변

2

네가 맞아. Java 보안 관리자를 설정하면 스크립트가 "샌드 박싱"됩니다. 특정 스크립트에 특정 권한을 부여하는 명시적인 보안 정책을 작성하지 않는 한 샌드 박스 권한 만 스크립트에 제공됩니다. 안전하지 않은 스크립트를 안전하게 실행할 수 있습니다.

도 참조 : 특정 스크립트에 대한 특정 권한을 부여하려면, 당신은 신뢰할 수있는 URL의 스크립트를로드하고 보안 정책에 해당 URL을 사용할 필요가 https://wiki.openjdk.java.net/display/Nashorn/Nashorn+script+security+permissions

+0

감사합니다,하지만 jjs 여전히 읽을 수 paradoxal을하지 않습니다 스크립트 파일'tmp.js'? (또는이 js 파일을 읽은 후에 * 활성화 된 보안입니까?) – Pierre

+1

아니요, jjs 코드 자체에는 기본적으로 AllPermission 정책이 지정됩니다. 명령 줄에 지정된 파일의 초기 세트를 읽는 일관성이있는 jjs 코드입니다. 스크립트가 추가 스크립트를로드하기 위해 "load"프리미티브를 호출하면 스크립트 (로드 스크립트) 보안 사용 권한도 적용됩니다. –