【发布时间】:2012-03-05 04:54:07
【问题描述】:
有人声称 eval 是邪恶的。
任何常规的 HTML 页面可能如下所示:
<script src="some-trendy-js-library.js"></script>
</body>
</html>
也就是说,假设执行此操作的人知道他的工作并让 javascript 在页面末尾加载。
在这里,我们基本上是将脚本文件加载到网络浏览器中。有些人更深入,并以此作为与 3rd 方服务器通信的一种方式......
<script src="//foo.com/bar.js"></script>
此时,无论出于何种原因,在运行时有条件地实际加载这些脚本非常重要。
我的观点是什么?虽然机制不同,但我们正在做同样的事情......将一段纯文本作为代码执行 - 又名 eval()。
既然我已经明确了我的观点,那么问题来了……
给定某些条件,例如 AJAX 请求,或者(更有趣的是)websocket 连接,执行服务器响应的最佳方式是什么?
这里有几个让你思考......
-
eval()服务器的输出。 (那边那个人是不是晕倒了?) - 运行服务器返回的命名函数:
var resp = sock.msg; myObj[resp](); - 构建我自己的解析器,以找出服务器试图告诉我的内容,而无需直接弄乱 javascript。
【问题讨论】:
-
您的第三个选项实际上并不是执行来自服务器的响应的选项,只是处理它。如果您要包含该选项,那么将 JSON 和 XML 作为选项也包含在内似乎是合理的。
-
@T.J.Crowder - 但是 JSON 和 XML 只是传输格式。我见过人们将函数(代码)作为字符串返回(最大兼容性),而其他人则在 JSON 中嵌入函数(仅适用于 eval-ing JSON,而不适用于浏览器自己的方法)。第三种选择只是在解释语言中解释语言的过度设计努力。 ://
-
我希望您不从服务器执行代码,而是编写从服务器读取结果并基于此执行操作的代码。否则,您将面临严重的安全问题。
-
@GoldenNewby - 是什么让你认为我从服务器返回的代码是安全的?
-
在请求您无法控制的内容时,您提出问题的目的是否在于指出脚本请求并不比
eval()更安全?
标签: javascript eval server-response