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

Jac*_*ack 11 javascript websocket node.js

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

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

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

一些用例..

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

Jos*_*eph 8

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

但是,如果确实需要,那么您可以通过"use strict"命令使用严格模式.当 eval()在严格函数中执行时,eval的内容不会在直接范围内泄漏.eval中的代码将包含在eval()其自身中(就好像它有自己的范围).在演示中,尝试删除尾部xeval()返回undefined.

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

  • 具有讽刺意味的是,在旧浏览器中使用JSON ......需要使用`eval()`. (4认同)
  • 评估的邪恶被高估了.它在早期被标记为邪恶,因为它被不恰当地用于评估表达式(以及许多其他东西)中的字符串,而这些字符串根本就没有必要.JSON,作为函数调用的函数等等都或多或少等同于`eval`,只需使用正确的工具即可完成工作. (3认同)
  • 有些人不同意(不是我个人,只是其他人),因为你*可以*手动解析JSON,不需要`eval`. (2认同)