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

Safe usage of eval() on server-sent JavaScript code

本文关键字:安全 eval 代码 服务器 JavaScript      更新时间:2023-09-26

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

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

问题

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

一些用例..

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

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

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

但是,使用eval()仍然是危险的。最好找到带有将在客户端解析的自定义字符串命令的替代项,例如 JSON。