gpt4 book ai didi

javascript - 为什么可以从 JS-ScriptEngine eval(String) 执行 Java 代码?

转载 作者:行者123 更新时间:2023-11-29 21:37:12 27 4
gpt4 key购买 nike

像这样设置 JavaScript-ScriptEngine 之后:

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;


public class Compute {

public static void main(String[] args){
try{

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");

System.out.println(engine.eval(args[0]));
}
catch(Exception e){
System.out.println("Syntax Error!");
}
}

}

为什么你可以做这样的事情: java 计算 "java.util.Arrays.toString(new java.io.File(\".\").listFiles())"

“JavaScript”的ScriptEngine不是应该只执行JS吗?

任何关于引擎实际做什么或为什么这是可能的链接,将不胜感激。

(编辑:这不是 security problem with Java ScriptEngine 的副本,因为我想知道为什么这是可能的,而不是如何避免它)

最佳答案

您必须停下来想一想脚本引擎的确切用途。引用officicial documentation (这是关于该主题的推荐阅读):

With the Java Scripting API, it is possible to write customizable/extendable applications in the Java language and leave the customization scripting language choice to the end user

重点是您用 Java 编写大型旧应用程序,然后有另一方(可能是最终用户、使用您的“引擎/框架”的应用程序开发人员,如果您是企业级商店,则可能是专门的顾问)定制它以满足他们的需求。

这种定制是在非编译语言(即 script)中进行的,例如 javascript (ECMAScript)。脚本引擎允许以您的小测试脚本演示的方式与 Java 类进行交互毕竟,这种交互首先是拥有脚本引擎的全部意义

关于javascript - 为什么可以从 JS-ScriptEngine eval(String) 执行 Java 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34553949/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com