我正在使用javax.scripting添加支持在服务器端运行任意用户上传的JavaScripts.显然我想要保护这些脚本!
Rhino本身就有一个用于在运行时保护脚本的框架.javax.scripting但是,该文档未提及脚本可用的安全性,权限或限制类.那么这只是javax.scriptingAPI中的一个巨大漏洞,它没有提供一个框架来保护它执行的脚本吗?
我不想直接使用Rhino,因为我最初尝试过但是在将Java实例暴露给正在运行的脚本时遇到了一些问题.该javax.scripting框架由它(它使用犀牛罩下)在一个多线程服务器使这个琐碎,并且还简化了运行脚本.
我想列出可在运行脚本中访问/实例化的Java类.有人能指出我如何实现这一目的的示例或文档吗?
是否可以从nashorn-engine隐藏或删除java api?因此它只能看到或使用"默认"ECMAScript 262 Edition 5.1以及一些特别暴露的函数/变量?
我想让我的最终用户为自己创建一些特定的逻辑,而不用担心他们会破解整个系统.当然,在nashorn引擎等中可能存在一些安全漏洞,但这是不同的主题.
编辑:对不起,我忘了提到我在我的java应用程序中运行nashorn,因此不能使用命令行参数.
在下面的代码中,我有一个javascript运行在与主要一个单独的线程中.该脚本是一个无限循环,因此它需要以某种方式终止.怎么样?
在脚本开始运行后调用.cancel()不起作用.但是如果我在线程初始化之后调用.cancel(),它将终止它(注释掉的行).
package testscriptterminate;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.Timer;
import java.util.TimerTask;
public class TestScriptTerminate extends TimerTask{
private ExecutorService threads;
private Future runScript;
private Timer t;
public TestScriptTerminate(){
t = new Timer();
t.schedule(this, 6000); //let the script run for a while before attempt to cancel
threads = Executors.newFixedThreadPool(1);
runScript = threads.submit(new ScriptExec());
//runScript.cancel(true); //will cancel here, before the script had a change to run, but useless, i want to cancel at any …Run Code Online (Sandbox Code Playgroud) 我有一个属性文件(键/值)对,我从当前读取一个键的值,并在UI中显示该值.
复杂性增加了,现在基于某些公式,价值更具动态性.该公式包含一个变量参数,其值I将在运行时获得.
是否有任何Java设计模式来设计此方案.
我想在针对一个键的属性文件中放置一个方法名称.
现在我将读取密钥并获取方法名称.此方法将计算该特定键的值.
请让我知道你的建议
我正在寻找沙盒 Java 8 的 Nashorn javascript 引擎。我已经发现了 --no-java 标志,它有帮助,但我还发现以下链接说需要“在启用 SecurityManager 的情况下运行”:http : //mail.openjdk.java.net/ pipermail/nashorn-dev/2013-September/002010.html
我还没有找到说明如何使用 Nashorn 完成此操作的文档,那么如何安全地完成此操作?