如何动态生成将对象转移到另一个Node进程的代码
How do I dynamically generate code that will transfer an object to another Node process
我正在构建一个节点服务器,它需要执行可能不安全的代码。为了实现这一点,我使用了一个Sandbox API来阻止攻击并返回脚本的结果和输出。它使用一个修改后的全局对象来保持对Node全局对象的访问隐藏(以及require…等的使用)。
我现在的具体需求是获取一个由用户定义的对象(这都是可信的,没有来自互联网上随机用户的任何东西,所以安全性目前不是最大的问题,现在是让它工作),并创建一个动态代码,将对象及其代码"转移"到子节点进程以安全执行(这里的安全性是为了让任何错误都不会破坏主进程)。
我目前的目标是获取一个对象,如下所示:
obj = {
defaultName: "Unnamed",
hello: function(name) {
if (typeof name === "undefined" || name === null)
name = this.defaultName;
echo("Hello, " + name + "!");
}
}
(这非常简单,是为了测试)
我正在使用FJSON来序列化函数以进行传输。我尝试将其序列化以便使用代码进行传输,如下所示:
// "code" is the users code
// "obj" is the object above
// "Extend" is a function defined by the Child process
var str = FJSON.funkify(obj);
code = "var temp = FJSON.unfunkify('"" + str + "'"); Extend(this, temp); temp = undefined; " + code;
在这样做之后,并试图将其写给孩子,我会遇到奇怪的(和神秘的错误),比如:"意外的令牌{"或(很少更神秘的)"意外的代币非法"(这很令人困惑,因为我已经验证了我在代码中没有插入'
,而测试代码中也没有)
放克化的字符串是{"defaultName": "Unnamed","hello":{"FUNCTION":true,"params":["name"],"body":"'n'r if (typeof name === '"undefined'" || name === null)'n'r name = this.defaultName;'n'r echo('"Hello, '" + name + '"!'");'n'r "}}
最后,为了测试,我尝试序列化一个简单的对象(没有使用JSON的函数,有使用FJSON的函数),然后尝试在Node REPL中的字符串上运行eval
,但当我尝试eval(JSON.stringify(objWithoutFunctions));
时,我一直得到...
,FJSON也是如此。
我已经为这个问题挣扎了好几个小时,想不出其他可以尝试/检查的事情了。欢迎提出任何建议。
更新
我仍然无法确定最有效的方法来实现这一点,因为字符串化对象并将其与代码一起传输是不起作用的,我也无法让它很好地工作。我已经恢复到将对象转换为代码,基本上是在属性中循环并手动分配变量。举个例子:
对象:
obj = {
prop: "ItsValue",
otherProp: true
};
将变成:
this.prop = "ItsValue"; this.otherProp = true;
我找到了更新中列出的解决方法,我只是将对象转换为代码。这可能是FJSON库的问题,从那时起我就修复了。这不再是一个问题,但我仍然欢迎任何能够解决最初问题的答案。
- 如何将值从区域转移到另一个区域
- 从一个功能到另一个功能的呼叫转移
- jQuery 淡入淡出效果以转移到另一个页面
- 如何动态生成将对象转移到另一个Node进程的代码
- 如何使用javascript将值从一个页面转移到另一个页面
- 将所选行转移到另一个表
- 使用java脚本将值从一个页面转移到另一个页面
- 在javascript中将点击事件从一个页面转移到另一个页面
- 如何获得memberID从一个页面转移到另一个,javascript
- 如何通过Javascript将php会话从一个页面转移到另一个页面
- 我可以在Javascript中将一个变量的值转移到另一个变量吗?
- 如何有选择地将一个函数中的所有画布动作转移到另一个函数
- 如何使用jquery将表行转移到另一个表中
- 在转移到另一个功能之前,我如何完全完成一个功能
- 在单击表单时,转移到另一个PHP页面,并显示复选框的结果
- 我如何从以前的JS状态保存“this”并将其转移到另一个
- 在RHEL5中,Firefox无法将焦点转移到另一个文本输入
- 无法在Firefox中将单击事件从一个元素转移到另一个元素
- PHP变量从一个页面转移到另一个页面
- 如何使用jquery将列表框值转移到另一个列表框