socket.io套接字ID应该保密吗?

时间:2017-03-04 19:01:09

标签: javascript security socket.io

我正在使用socket.io开发一个Web应用程序。 我目前正在使用套接字ID作为标识符,它将广播到其他客户端。现在,这引发了安全问题,即这个id是否可以用来劫持另一个用户会话。不幸的是,在网上找到这方面的信息非常困难。

那么 - 套接字ID应该保密,还是可以安全地将其用作公共标识符?

1 个答案:

答案 0 :(得分:5)

客户端无法直接使用socket.id执行任何操作。因此,允许知道id本身不会导致新的漏洞。但是,如果您的服务器允许在套接字上执行操作(如果只知道ID),那么您必须评估服务器公开的那些操作的风险。我们无法对这些进行评论,因为您没有向我们展示任何代码或设计。

例如,如果您的服务器支持消息调用“购买”,并且所需的全部是客户端触发购买操作的ID,那么如果您让ID公开,则可能会出现问题。但是,只要对服务器提供给客户端的id进行操作的唯一操作是供公众在任何套接字上访问(例如向他们发送消息),那么应该没有问题。

  

那么 - 套接字ID应该保密,还是可以安全地将其用作公共标识符?

作为一个公共标识符,它完全没问题,而且它就是它的一部分。它应该用作标识符(如“我想向Bob发送消息,因此我将告诉服务器向其id发送消息”),但不作为授权。毕竟,如果你公开它,那么这不是秘密,所以不应该被你自己的服务器API用于授权。

  

我想我应该更具体一点。我想知道恶意用户是否有可能通过提供另一个套接字ID来通过数据包伪造将其请求与外部套接字对象(我用作会话缓存)配对。我从你的回答中得出结论并非如此 - 非常感谢!

socket.io在传输本身中不使用socket.id。所以你不能做任何恶意的事情,例如冒充别人,而不仅仅是因为你知道他们的socket.id。事实上,据我所知,客户端甚至不知道socket.id - 它在服务器实现中用于识别和查找特定客户端。