在服务器发送的JavaScript代码上安全使用eval()

时间:2012-05-07 22:14:06

标签: javascript node.js websocket

我正在使用Node.js和Socket.io。我编写了一个应用程序,它可以从服务器发送JavaScript片段并在客户端上执行它们。 JavaScript通过Secure WebSocket(WSS)发送,客户端有一个监听器,它将执行通过服务器传递给它的任何代码。

这个简短的脚本演示了原则:http://jsfiddle.net/KMURe/,您可以将onScript函数视为套接字侦听器。

问题

我可以采用哪些安全协议来确保此交易安全?安全的websocket频道是否会使第三方难以充当中间人(在将代码发送到客户端之前更改代码)?

一些用例..

  • 动态分配分布式计算。
  • 浏览器客户端可以从服务器动态学习。
  • 统一更新浏览器行为。

1 个答案:

答案 0 :(得分:8)

eval(),即使你有合法使用,也是危险的。你应该不惜一切代价避免使用它。小心使用它。

但是,如果确实需要,那么您可以通过"use strict" command使用严格模式。当eval() is executed in a strict function时,eval的内容不会在直接范围内泄漏。 eval中的代码本身就是contained in eval()(好像它有自己的范围)。 In the demo,请尝试删除跟踪xeval()将返回undefined

但是,使用eval()仍然很危险。如果你找到像JSON这样的替代品,并且会在客户端解析自定义字符串命令,那就更好了。