如何从代码文本加载模块
How to load module from code text?
我想从原始文本中加载模块,例如
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')
。但是有没有直接的方法呢?
要将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之前没有其他安全的方法来检查它,除非您自己遍历字符串并禁止某些可能的攻击....
但是记住,任何可能出错的事情都会出错。有了用户输入,就有了无限的可能性。
相关文章:
- 使用RequireJS从数组动态加载模块
- NgRoute未加载(模块错误)
- 动态加载模块角度
- RequireJS - 动态加载模块
- 无法在 Angular JS 中加载模块
- 从视图调用异步加载模块函数
- 主干木偶:木偶.应用程序导致 Require.js 模块加载错误,“'错误:尚未为上下文加载模块名称'A
- Webpack - 在不创建别名的情况下加载模块
- Jasmine 由于 ES6 语法而未加载模块
- 角度AMD加载模块不起作用
- 带有 angularjs 和 requirejs 的延迟加载模块
- RequireJS 有时不加载模块
- Require.js甚至在IF语句中也在加载模块
- AngularJS加载模块失败
- 节点未从项目根目录加载模块
- 通过requirejs自动加载模块
- 在运行时重新加载模块
- 动态命名的局部变量,用于加载模块
- RequireJS-加载模块的多个实例
- 无法在HotTowel SPA上加载模块