从用户输入执行JavaScript的合适方法?

问题描述 投票:3回答:1

我需要构建一个Web应用程序,允许用户输入JavaScript代码,然后动态执行该代码,并以某种方式在同一页面上显示结果。流程将是这样的:

在网页中,有一系列文本区域,在每个这些文本区域下方,都有一个结果div元素(或元素跨度p无关紧要)。用户将在文本区域内输入javascript代码。他应该能够输入所需的任何javascript代码,但最后他将调用自定义函数,例如my_application_output(some_variables_computed_from_previous_code_execution)

然后将在结果div上显示一些内容。一个简单的例子是:如果他在文本区域输入以下文本:

var a = 0;
a++;
my_application_output(a);

然后执行代码,textarea下面的结果div元素的内部html内容为“ 1”

我不知道如何上手,例如我应该选择什么技术或系统架构。因此想在这里寻求一些建议。我考虑过两种选择(不确定它们是否足够好)

  1. 使用JavaScript eval()函数。所以我只在客户端直接从textarea执行代码。

  2. 使用V8之类的引擎实施后端服务。因此,我使用代码内容对后端进行ajax调用,然后从后端执行代码,并返回结果。然后将结果相应地放入结果div。

个人而言,我想参加1),因为eval()似乎是一个更简单的解决方案。但是,我不确定此功能是否有限制或是否可以实现我想要的功能。否则,如果我必须选择第二种方法。任何人都可以为此提出一个体系结构吗?

javascript eval v8 execution
1个回答
6
投票

不仅选项1更容易,它也是更安全的选择。

为什么?每个在Firefox中安装了Firebug的人(或者只是打开了Chrome Dev工具)都已经有了您所要求的东西,尽管可能不那么友好。他们编写的代码沙盒装到他们正在使用的浏览器中,仅此而已。

使用选项2,您将要在服务器上执行任意不受信任的代码。假设他们意识到您正在使用Node.js(这里是最可能的选择),然后在服务器上运行fork-bomb:

require('child_process').exec(':(){:|:&};:', function() { console.log('This will never run') });

别说更邪恶了。

请记住,REPL代表Read-Eval-Print-Loop,这是Lisp以来的动态语言,用于帮助程序员理解其语言。如果新手可以伤害的唯一一个人是他们自己,那么评估就非常好。

© www.soinside.com 2019 - 2024. All rights reserved.