Nashorn/jjs 安全性:在服务器端执行用户脚本
Nashorn/jjs security: executing a user's script on server side
我正在编写一个应用程序,用户可以在其中提供自定义 javascript 函数以使用 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
足以阻止他 read/write 文件系统上的文件吗?
谢谢。
你说得对。一旦你设置了 java 安全管理器,你的脚本就是 "sandboxed"。除非您编写明确的安全策略以授予特定脚本特定权限,否则只会向脚本授予沙箱权限。您可以安全地 运行 不安全的脚本。要向特定脚本授予特定权限,您需要从受信任的 URL 加载脚本并在安全策略中使用这些 URL:
另请参阅:https://wiki.openjdk.java.net/display/Nashorn/Nashorn+script+security+permissions
我正在编写一个应用程序,用户可以在其中提供自定义 javascript 函数以使用 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
足以阻止他 read/write 文件系统上的文件吗?
谢谢。
你说得对。一旦你设置了 java 安全管理器,你的脚本就是 "sandboxed"。除非您编写明确的安全策略以授予特定脚本特定权限,否则只会向脚本授予沙箱权限。您可以安全地 运行 不安全的脚本。要向特定脚本授予特定权限,您需要从受信任的 URL 加载脚本并在安全策略中使用这些 URL:
另请参阅:https://wiki.openjdk.java.net/display/Nashorn/Nashorn+script+security+permissions