使用变量

时间:2017-12-13 22:42:01

标签: javascript node.js

我正在构建一个简单的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让我失望了。

1 个答案:

答案 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套接字处理程序代码。