我正在编写一个应用程序,用户可以使用nashorn / jjs提供自定义javascript函数来过滤服务器端的文件:
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
是否足以阻止他在文件系统上读/写文件?
感谢。
答案 0 :(得分:2)
你是对的。设置java安全管理器后,您的脚本将被“沙盒化”#34;。除非您编写明确的安全策略,其中您授予特定脚本的特定权限,否则仅为脚本提供沙箱权限。您可以安全地运行不安全的脚本。要授予特定脚本的特定权限,您需要从可信URL加载脚本并在安全策略中使用这些URL:
另请参阅:https://wiki.openjdk.java.net/display/Nashorn/Nashorn+script+security+permissions