java 运行 自定义的 Groovy, 如何防止用户输入:System.exit(0) 、死循环等的情况?
java 运行 自定义的 Groovy, 如何防止用户输入:System.exit(0) 、死循环等的情况?
Jenkins的做法你可以参考(具体哪部分代码我忘了,以前看过Jenkins源码)
定义一个白名单,在安全沙箱运行Groovy代码,限制只允许使用有限的Groovy方法
定义任务超时,超时的任务自动停掉
8 回答6.4k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
3 回答1.6k 阅读✓ 已解决
可以使用SecurityManager来实现
System.exit
退出调用的检查。如下死循环比较难定义, 因为可能是线程间事件等待,可能是耗时操作,简单的办法是把外部代码运行在单独的线程里运行, 然后设置超时时间,没有按时完成的直接停掉就好。但用户代码也可能生成新的Thread, 很难做到安全, 可以用
Runtime.exec(String command)
开启新的jvm, 对新的jvm启用自定义策略文件, 同时对新的jvm进行监控可能也是个办法。