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