Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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
Javascript Ajax+;eval比脚本标签更有害?_Javascript_Eval - Fatal编程技术网

Javascript Ajax+;eval比脚本标签更有害?

Javascript Ajax+;eval比脚本标签更有害?,javascript,eval,Javascript,Eval,我正在构建一个应用程序,在其中我可以随时加载脚本: var newScript=document.createElement("script"); newScript.src="script.js"; document.head.appendChild(newScript); 脚本在同一个域中,因此我考虑使用ajax+eval,而不是使用脚本标记,因为它给了我更多的灵活性(特别是与其他脚本同步)。这两个选项是等效的,还是使用eval时有任何额外的风险?eval唯一合法的用法是当AJAX调用返回

我正在构建一个应用程序,在其中我可以随时加载脚本:

var newScript=document.createElement("script");
newScript.src="script.js";
document.head.appendChild(newScript);

脚本在同一个域中,因此我考虑使用ajax+eval,而不是使用脚本标记,因为它给了我更多的灵活性(特别是与其他脚本同步)。这两个选项是等效的,还是使用eval时有任何额外的风险?

eval唯一合法的用法是当AJAX调用返回JavaScript时。虽然这确实提供了额外的灵活性。我不确定您的特定应用程序,但以下是主要关注点:

  • 用户可以通过AJAX发送他们想要的任何数据。确保服务器端代码是干净的
  • AJAXing脚本意味着浏览器无法缓存它们。这将导致较慢的用户体验

就风险而言,两者是等价的

这两种方法都会盲目执行下载的脚本(不进行检查)。唯一的区别是不能使用ajax执行来自其他域的脚本


另一方面,通过在评估脚本之前将其作为文本下载,您有机会对其运行一些文本处理,例如检查已知的恶意攻击、对其进行linting等。因此,理论上,您可以使用ajax+eval构建一个安全和/或受限的执行环境。但是找出什么是恶意的,什么是良性的并不容易。

我看不到
eval
,听不到
eval
。我投票重新开始这个问题。它在几分钟内收到了答复,没有任何“辩论、争论、投票或扩展讨论”。
您给出的代码实际上不起作用。这是使用javascript包含其他javascript文件的标准方法。@SomeKittens thx获取答案。我肯定是在说通过ajax获取script.js文件。有几点我不太明白:1/我上面的代码应该运行脚本2/AJAXing脚本应该仍然允许缓存。3/我同意用户可以通过AJAX发送他们想要的任何数据,但脚本标记中的文件不是也是这样吗?(我特别有兴趣澄清我的观点3/)谢谢!你知道jQuery getScript是否做过这样的文本处理吗?@Christophe:我恐怕对jQuery内部的内容不太了解,但我的猜测是否定的。一些早期的JSON解析器使用了先验证后评估的技术,因为它通常比手动解析大型对象的文本要快。当本机JSON方法/函数不可用时,一些JSON解析器仍然会回退到先验证后评估。