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

时间:2012-12-05 18:27:43

标签: javascript eval

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

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

脚本位于同一个域中,因此我考虑使用ajax + eval而不是使用脚本标记,因为它为我提供了更大的灵活性(特别是与其他脚本同步)。两个选项是否相同,或者在使用eval时是否存在任何其他风险?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

关于风险,两者都是等价的。

两种方法都盲目地执行下载的脚本(不检查)。唯一的区别是您无法使用ajax从其他域执行脚本。

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