Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有eval()的Javascript模块;_Javascript_Security_Module_Eval - Fatal编程技术网

带有eval()的Javascript模块;

带有eval()的Javascript模块;,javascript,security,module,eval,Javascript,Security,Module,Eval,每个javascript开发人员都知道;埃瓦尔是邪恶的 但由于我在寻找javascript中的终极模块技术,我读到了一些非常有趣的关于使用eval作为模块加载器的人的文章,这有两个主要好处: 移动设备的加载速度更快,因为它可以一次加载整个字符串 脚本分离,无需在每个模块中定义像require.js这样的包装器 那又是怎么回事?通过eval只加载几个函数,这可能是一个解决方案吗?我的意思是从安全方面来说 编辑:sry忘记了文章的链接:因为3G连接的延迟很高,一个HTTP请求,即使有更多的数据,

每个javascript开发人员都知道;埃瓦尔是邪恶的

但由于我在寻找javascript中的终极模块技术,我读到了一些非常有趣的关于使用eval作为模块加载器的人的文章,这有两个主要好处:

  • 移动设备的加载速度更快,因为它可以一次加载整个字符串
  • 脚本分离,无需在每个模块中定义像require.js这样的包装器
那又是怎么回事?通过eval只加载几个函数,这可能是一个解决方案吗?我的意思是从安全方面来说


编辑:sry忘记了文章的链接:

因为3G连接的延迟很高,一个HTTP请求,即使有更多的数据,通常也比多个较小的请求快得多

这篇文章建议将多个模块合并到一个文件中,如下所示:

var modules = {
    'main.js': 'alert("Main module")',
    'another.js': 'alert("Another module")',
    'notUsed.js': 'alert("I am never used")',
};
这样,它们都可以通过一个更快的HTTP请求下载,并且您仍然只能包含/评估所需的模块

e、 g.你可以做:

var requireFile = function(file) {
    if(modules[file])
        eval(modules[file]);
};

requireFile('main.js');
requireFile('another.js');
只有
main.js
other.js
会被计算,
notUsed.js
会被忽略

就安全性而言,通过
标记包含它们应该没有什么不同,无论您使用什么来组合脚本,都不能意外地组合/包含其他文件/字符串

因此,从安全角度来看,上述内容与以下内容没有任何区别:

<scruipt src="main.js"></script>
<scruipt src="another.js"></script>


当然,您仍然有.

我认为评估您100%控制的静态字符串(您的代码-您计划执行的代码,只是延迟加载)是可以的。我真的不明白为什么您会将代码作为字符串加载,而不是作为脚本文件加载,为什么这样会更快?很难调试已评估的脚本。没有优化。但这是“好的评估”:我正在处理requirejs/ember的问题,并且正在考虑走这条路。从表面上看,实现起来很简单,但我还没有看到任何库可以做到这一点。目前是否有大型项目正在这样做?我担心以后会遇到问题(例如性能)。什么是标签?