我正在考虑以下架构。通过websockets连接到服务器的客户端将JSON包发送到服务器。除了其他数据之外,JSON内部还有" action":" somefunction();"。然后服务器将解析JSON,如果操作不为空,则它将eval,从而运行该命令。
替代方法是简单地放一个字符串" somefunction"在action属性中,并在服务器上有一个switch语句来运行相应的代码。
思想或其他可能性?
答案 0 :(得分:0)
您所描述的内容并不能阻止恶意客户端发送任意代码来执行。 这是一个安全漏洞。
如果您希望客户端代码触发服务器上的某些功能,则传递服务器将解析的一些数据并检查以确保仅执行相应的代码。它可以是这样的JSON结构,客户端发送:
{
"name": "foo",
"arguments": ["a", "b", "c"]
}
当服务器收到它并用JSON.parse
解析它时,它会验证name
是否为有效值并调用相应的函数。这些函数可以是这样的结构
var dispatch = {
foo: function (a, b, c) { },
bar: function (a) { }
// etc...
}
一旦解析了JSON数据并将其存储到名为data
的变量(例如)中,调用就可以是:
dispatch[data.name].apply(undefined, data.arguments)
如果需要,返回数据也可以作为JSON结构返回给客户端。
答案 1 :(得分:-1)
如果我使用动态数据按名称调用函数,我倾向于使用window["function_name_as_string"](param1,param2);
。