我想从原始文本加载模块,例如
var code = "exports.name = 'hello'";
// Is there such a function?
var name = requrie_from_code(code).name;
console.log(name); // should be 'hello'
我认为可以先将代码保存到tmpcode.js
然后require('./tmpcode.js')
等临时文件中来完成。但有没有办法直接做到这一点?
答案 0 :(得分:0)
要将JavaScript字符串解释为JavaScript本身,您应该使用eval
函数...但是请注意我的警告,如果有任何形式的用户输入,或者您需要复杂的调试,那么您就是要碰到一些墙壁,它会受伤。
JavaScript的eval
接受字符串输入并对其进行解释,就像那样......这是一个例子:
var test = "var example = 5;";
eval(test);
console.log(example);
简单......
以下是eval可能存在危险的一些情况!
假设您出于某种原因拥有以下代码:
dbModule.syncConnection(function(database){
eval("var test = '" + someUserInput + "'");
});
通过这种方式,用户可以通过输入以下内容轻松绕过您设置的内容:
"'; database.query('DELETE EVERYTHING MWAHAHA'); '"
eval
函数将变为:
var test = ''; database.query('DELETE EVERYTHING MWAHAHA'); ''
......所以这只是一个关于eval
如何危险的简单例子。
否则,在解释JavaScript之前,没有任何其他安全方法可以检查JavaScript,除非你自己查看字符串并禁止某些可能的攻击....
但请记住,任何可能出错的事都会出错。通过用户输入,有无限的可能性。