我正在构建一个简单的node.js websocket服务器,我希望能够从客户端向服务器发送请求并让它只处理事情(没有任何可能造成伤害的事情)。理想情况下,客户端将向服务器传递一个带有2个变量的对象,其中一个用于对象,另一个用于该对象中要调用的特定函数。像这样:
var callObject = {
'obj': 'testObject',
'func':'testFunc'
}
var testObject = {
func: function(){
alert('it worked');
}
}
// I would expect to be able to call it with sometihng like.
console.log( window[callObject.obj] );
console.log( window[callObject.obj][callObject.func] );

我尝试用全局调用它(因为node.js不使用它而不是浏览器窗口)但是它不能工作,它总是告诉我它找不到callObject。未定义的功能。如果我在callObject.obj上调用console.log,它会按预期将字符串变量显示为字符串。如果在对象本身上运行console.log,我会得到该对象。
我猜这是相当简单的事情,但是我的Google-fu让我失望了。
答案 0 :(得分:0)
我的建议是抵制该模式,并且没有客户端代码选择任何要调用的函数。如果你不小心,你已经建立了一个很好的大安全漏洞。特别是如果您正在考虑使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h2 class "uniqueClass">Headline</h2>
<p>A p tag always follows.</p>
<div class="accordion">An accordion always comes after the p tag.</div>
。
而是在客户端发送的数据与服务器代码之间进行更明确的映射。 (类似于表达什么给你的路线。)
你可能有类似的东西
eval
这应该与您想要达到的目标非常接近。
只需确保const commands = { doSomething() { ... } );
// Then you should be able to say:
let clientCommand = 'doSomething'; // from client
commands[clientCommand](param);
验证传入的任何参数。
对于两个间接层:
doSomething
我想你可能只需找到放置命令图的正确位置。显示您的Web套接字处理程序代码。