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

cwr*_*wry 2 javascript security socket.io

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

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

jfr*_*d00 5

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

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

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

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

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

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

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