我在使用nashorn时遇到问题,我发现存在此安全漏洞:https://mbechler.github.io/2019/03/02/Beware-the-Nashorn/
当某人可以通过以下命令实例化代码时:this.engine.factory.scriptEngine.eval('java.lang.Runtime.getRuntime().exec("whatever")')
确实影响了我的网站。如何解决该问题?
本文告诉您。
请注意,在安全路径中添加的逻辑会阻止访问仅当BOTH有
engine
和SecurityManager
时,才有ClassFilter
当下。向Oracle报告这一点,据称这是预期的行为。因此,即使在CVE-2018-3183的补丁之后,如果没有
SecurityManager
有效,engine
属性将对所有用户可用脚本,即使ClassFilter
不允许任何访问完全是Java类。
安全上,仅靠ClassFilter
是不够的。您还需要一个SecurityManager
。仅当提供engine
属性的代码都存在时,才会被禁用。
((从它的外观看,任何安全管理器都将做-甚至允许所有内容的管理器。但是出于安全性考虑,或者如果出于某些原因您实际上want允许访问this.engine
,您可能想要SecurityManager
的子类,至少可以拒绝产生子进程或替换当前安全管理器的尝试。坦率地说,最好将其默认抛出,并将要允许的内容列入白名单。您可能不希望用户随意编写文件,接受网络连接等。)
一旦有了这样的安全经理,您就可以说System.setSecurityManager(yourSecurityManager);
来负责。