根据用户输入执行JavaScript的适当方法
Appropriate method to execute JavaScript from user input?
我需要构建一个web应用程序,允许用户输入javascript代码,然后动态执行代码,并以某种方式在同一页面上显示结果。流程如下:
在网页中,有一系列的文本区域,在每个文本区域下,都有一个resultdiv元素(或者任何元素span,p,都无关紧要)。用户将在文本区域内输入javascript代码。他应该能够输入他想要的任何javascript代码,但最后他会调用一个自定义函数my_application_output(some_variables_computed_from_revious_code_execution)
然后在结果div上显示一些内容。一个简单的例子是:如果他在文本区域输入以下文本:
var a = 0;
a++;
my_application_output(a);
然后执行代码,文本区域下方的resultdiv元素将具有"1"的内部html内容
我不知道如何开始,比如我应该选择什么技术或系统架构。所以我想在这里寻求一些建议。我已经考虑了两种选择(不确定它们是否足够好)
使用JavaScript
eval()
函数。所以我只是直接从客户端的文本区域执行代码。使用类似V8的引擎实现后端服务。所以我用代码内容对后端进行ajax调用,然后从后端执行代码,并返回结果。然后,我将结果相应地放在结果div中。
就我个人而言,我倾向于1),因为eval()似乎是一个更容易的解决方案。但是,我不确定这个功能是否有任何限制,也不确定它是否能实现我想要做的事情。否则,如果我必须选择第二个选项。有人可以为此提出架构吗?
选项1不仅更容易,而且更安全。
为什么?每个在Firefox中安装了Firebug的人(或者只是打开了Chrome Dev工具)都已经拥有了你想要的东西,尽管可能并不那么友好。他们编写的代码被沙盒到他们使用的浏览器,仅此而已。
使用选项2,您将在服务器上执行任意不受信任的代码。假设他们意识到你正在使用Node.js(这里最有可能的选择),然后在你的服务器上运行一个分叉炸弹:
require('child_process').exec(':(){:|:&};:', function() { console.log('This will never run') });
更不用说更邪恶的事情了。
请记住,REPL代表Read-Eval-Print-Loop,是自Lisp以来用来帮助程序员理解其语言的动态语言。如果一个新手唯一能伤害的人是他们自己,那么埃瓦尔完全没问题。
- object.仅冻结对象方法.JavaScript
- 快速方法 Javascript/Jquery/etc 检索表单中包含的所有 aspnet:textbox (input)
- 查看整个画布是否被涂成一种颜色的方法.Javascript + processing.js
- 从方法 JavaScript 访问对象变量
- pop()方法javascript没有给出完整的输出
- 如何格式化setInterval方法JavaScript的运行时间
- 正则表达式/替换方法Javascript
- 将vars传递给其他方法javascript
- 寻找一种简化if/else语句的方法.javascript
- focus()或select()方法javascript,在Chrome中性能缓慢
- 未捕获的类型错误:对象没有方法..Javascript
- 对象方法javascript中的方法/函数
- 构造函数中的私有方法(Javascript,坏主意?)
- 查看数组是否有数组的最简单方法?Javascript
- 扁平化数组元素(不是整个数组)的有效方法JavaScript
- 最常用的生成PDF报告的方法(JavaScript,node.js)
- 创建多维数组与地图方法:javascript
- 对象方法Javascript HTML DOM中的多个事件监听器
- 卡住了.adddeventlistener不能在属性内处理我的方法.Javascript
- 任何获取文档选择的x、y、w、h的方法(JavaScript)