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脚本意味着浏览器无法缓存它们。这将导致较慢的用户体验
另一方面,通过在评估脚本之前将其作为文本下载,您有机会对其运行一些文本处理,例如检查已知的恶意攻击、对其进行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解析器仍然会回退到先验证后评估。