我正在构建一个应用程序,我可以随时加载脚本:
var newScript=document.createElement("script");
newScript.src="script.js";
document.head.appendChild(newScript);
脚本位于同一个域中,因此我考虑使用ajax + eval而不是使用脚本标记,因为它为我提供了更大的灵活性(特别是与其他脚本同步)。两个选项是否相同,或者在使用eval时是否存在任何其他风险?
答案 0 :(得分:0)
eval
的唯一合法用途之一是当您的AJAX调用返回JavaScript时。虽然这确实提供了额外的灵活性我不确定您的特定应用程序,但这些是主要问题:
答案 1 :(得分:0)
关于风险,两者都是等价的。
两种方法都盲目地执行下载的脚本(不检查)。唯一的区别是您无法使用ajax从其他域执行脚本。
另一方面,通过在评估之前将脚本作为文本下载,您可以在其上运行一些文本处理,例如检查已知的恶意攻击,linting it等等。理论上,您可以构建一个安全的和/或使用ajax + eval限制执行环境。但要弄清楚什么是恶意的以及什么是良性的并不容易。