Javascript 如何保护使用javax.scripting运行的脚本?
我正在使用Javascript 如何保护使用javax.scripting运行的脚本?,javascript,security,javax.script,server-side-scripting,Javascript,Security,Javax.script,Server Side Scripting,我正在使用javax.scripting添加对在服务器端运行任意用户上传的JavaScripts的支持。显然我想保护那些脚本 Rhino本身就有一个在运行时保护脚本的框架。但是,javax.scripting的文档没有提到安全性、权限或限制脚本可用的类。那么这只是javax.scriptingAPI中的一个巨大漏洞,它没有提供一个框架来保护它执行的脚本吗 我不想直接使用Rhino,因为我最初尝试过使用Rhino,但在将Java实例暴露给运行中的脚本时遇到了一些问题。脚本编写框架(在引擎盖下使用R
javax.scripting
添加对在服务器端运行任意用户上传的JavaScripts的支持。显然我想保护那些脚本
Rhino本身就有一个在运行时保护脚本的框架。但是,javax.scripting
的文档没有提到安全性、权限或限制脚本可用的类。那么这只是javax.scripting
API中的一个巨大漏洞,它没有提供一个框架来保护它执行的脚本吗
我不想直接使用Rhino,因为我最初尝试过使用Rhino,但在将Java实例暴露给运行中的脚本时遇到了一些问题。脚本编写框架(在引擎盖下使用Rhino)使得这一点变得微不足道,并且简化了在多线程服务器中运行脚本
我想列出可以在运行脚本中访问/实例化的Java类。有人能给我举个例子或文档来说明如何实现这一点吗?事实证明,
javax.scripting
并没有提供安全框架。经过一些搜索,我在Google的缓存中找到了一个文档,该文档建议尝试使用Java的DoPrivilegeAction
框架,但经过一些实验,我无法获得该文档,以阻止脚本打开套接字或访问文件系统
在我问了这个问题之后,我发现它之前在StackOverflow上被问过:在那个页面上,它错误地表明JDK6中包含的Rhino已经解决了安全问题。正如我指出的,我能够从脚本中打开套接字和其他有害操作
最后我放弃了javax.scripting
,直接嵌入了Rhino。通过构建一个自定义的ContextFactory
,它也是一个ClassShutter
,我能够轻松实现两个结果:
java.lang.*
,以及我的服务器层次结构中的一些精选类ClassShutter
体系结构时很有价值,Rhino自己的ContextFactory
API页面描述了如何构建自定义ContextFactory描述了一种沙箱Rhino的方法,而javax.scripting使用Rhino作为JS脚本引擎,因此您应该能够使用上述方法,尽管包名可能不同
我一直在开发一个Java应用程序
需要Rhino来编写脚本。应用程序
需要运行不受信任的JavaScript
来自第三方的代码,所以我不得不
找到一种阻止访问所有Java的方法
方法,除了我想要的。
如果有,这不会是一个问题
这是一种禁用LiveConnect的简单方法
-Rhino的特性提供了对脚本的java访问,但是有
没有这样的事
然而,经过大量挖掘
我终于找到了一个办法
这没有太多的黑客攻击。在里面
事实上,只需扩展
一些Rhino类,并使用
设置程序提供用于覆盖某些
默认值中的一个
仅供参考,这在javax.scripting的新Java8实现中是可能的,它使用了一个名为Nashorn的新引擎。看