首页 / 知识
如何在沙箱中使用 Rhino for Java 运行 Javascript?
2023-04-17 05:32:00

How can you run Javascript using Rhino for Java in a sandbox?我们的部分 java 应用程序需要运行由非开发人员编写的 javascript。这些非开发人员正在使用 javascript 进行数据格式化。 (主要是简单的逻辑和字符串连接)。 我的问题是如何设置这些脚本的执行,以确保脚本错误不会对应用程序的其余部分产生重大负面影响。
基本上,我需要将 javascript 范围设置为仅包含他们需要的内容,而不再包含更多内容。 为了防止无限循环,您可以在脚本运行时观察指令计数(这仅适用于解释脚本,不适用于编译脚本)。 Rhino JavaDocs中有这个例子可以防止脚本运行超过十秒:
要阻止 Java 类和方法访问,请查看... http://codeutopia.net/blog/2009/01/02/sandboxing-rhino-in-java/ 为了防止无限循环,你需要把它放在一个单独的进程中,以便它可以被杀死。 为了防止创建线程,您需要扩展 SecurityManager(默认实现允许不受信任的代码访问非根线程组)。 Java 安全确实允许您阻止对文件系统的访问。 对于数据库限制,您也许可以使用标准的 SQL 用户安全性,但这很弱。否则,您需要提供一个 API 来强制执行您的限制。 编辑:我要指出的是,JDK6提供的Rhino版本已经完成了安全工作,但不包括编译器。 我刚刚看到这篇博客文章,它似乎对沙盒或多或少有用(不仅仅是 Rhino): http://calumleslie.blogspot.com/2008/06/simple-jvm-sandboxing.html 如果您只寻找纯 JavaScript 函数,这里有一个基于 JDK 嵌入式 Rhino 库的解决方案,无需导入任何第三方库: 如果给定的脚本包含 Java 脚本,类加载器将尝试加载 JavaMembers 或其他类并触发类未找到异常。这样,恶意脚本将被忽略而不执行。 详情请阅读 ConfigJSParser.java 和 ConfigJSClassLoader.java 文件: https://github.com/webuzz/simpleconfig/tree/master/src/im/webuzz/config Javascript 是单线程的,不能访问文件系统,所以我认为你不必担心这些。我不确定是否有办法设置超时以防止无限循环,但您总是可以生成一个执行脚本的 (Java) 线程,然后在这么长时间后终止该线程。 |
最新内容
相关内容
linux运行图形界命令?
linux运行图形界命令?,系统,密码,地址,电脑,图形界面,地方,工具,界面,终端,图形,linux图形化界面命令第一种方式比较简单,只需要选择相应的带图linux怎样运行命令?
linux怎样运行命令?,系统,工作,信息,基础,地址,命令,目录,工具,密码,一致,Linux系统基础操作指令1、linux常用命令有pwd命令、cd命令、ls命令linux操作数据库命令?
linux操作数据库命令?,地址,服务,系统,密码,数据库,工具,名字,首页,命令,参数,如何实现MySQL数据库的基本用法在linux下1、mysql all-databaselinux下载数据命令?
linux下载数据命令?,软件,工具,数据,系统,代理,官网,网络,名称,网址,盘中,在linux下如何下载svn上的文件?1、首先,打开linux,进入主界面,然后在主linux编译完运行命令?
linux编译完运行命令?,系统,代码,环境,工具,信息,命令,文件,程序,终端,编辑,在linux中编译C输入完程序后输入个:wq然后按什么键就然后就回到了linux命令程序运行?
linux命令程序运行?,状态,系统,服务,情况,命令,进程,软件,数据,发行,时间,Linux中如何启动进程?进程调度命令有哪些?实现调度启动进程的方法有linux运行脚本命令?
linux运行脚本命令?,系统,代码,服务,文件,工具,平台,网站,脚本,命令,方法,Linux配置开机自启动执行脚本有哪些方法方法1:执行ntsysv命令,然后在做数据linux常用命令?
做数据linux常用命令?,工作,系统,基础,网络,数据,标准,管理,工具,地址,命令,linux运维常用命令Curl命令用法 curl语法和参数选项 # curl [optlinux命令后加运行?
linux命令后加运行?,状态,暂停,工具,单位,进程,环境,网络,系统,权威,第一,mv什么意思呢?1、MV就是音乐短片(Music Video),是指与音乐(通常大部分是ssh运行linux命令?
ssh运行linux命令?,地址,服务,系统,软件,工具,电脑,网络,密码,名称,命令,在linux命令中登陆ssh服务的命令是?步骤如下:查询\安装SSH服务 (1)登陆linux查重复数据命令?
linux查重复数据命令?,工具,数据,系统,电脑,名字,资料,代码,百度,标准,技术,利用Linux命令行进行文本按行去重并按重复次数排序1、输入文件 指linux运行多个命令?
linux运行多个命令?,环境,软件,系统,工作,服务,连续,命令,指令,分号,冲突,linux多个用户同时执行命令会冲突吗不会冲突。解释:用户登录linux的