当使用websocket连接时,有哪些可能的方法来验证用户身份?

2024-05-12 22:59:18 发布

您现在位置:Python中文网/ 问答频道 /正文

示例场景:通过websocket连接的基于Web的多用户聊天应用程序。如何确保(或保证)此应用程序中的每个连接都属于某个经过身份验证的用户,并且在连接期间“不能”被假用户模拟或干预利用。

顺便说一下,我在服务器端使用tornado websocket来实现基本的聊天室,并且已经为我的应用程序的非websocket部分进行了身份验证。

注:假设经过身份验证的用户发布了他想要的内容,当其他用户打开项目的列表页面,并且自动地将其他用户添加到websocket侦听器列表中时,我希望每个用户能够单独与项目的买家聊天,而不是以聊天室的方式,而是通过一对一的聊天


Tags: 项目用户身份验证web应用程序利用示例内容
3条回答

首先,关于WebSockets,有两件事你应该记住:(a)它是一个不断发展的标准,(b)它的设计意图是与不受信任的客户合作。

对于WebSockets,您应该始终做的最大和最重要的事情是检查它们的来源。如果来源不匹配,显然您不想处理该客户机,所以忽略他们的请求。另外,确保您使用的是“wss”安全WebSocket协议,而不是“ws”不安全协议。这将确保您的邮件是加密的。

这样做的问题是,这些信息可能会被欺骗。请参见this blog post快速演示。

附加安全:

  • 尝试发送一个salted令牌,对其进行salted/hash并在握手阶段将其发送回并验证。
  • 限制太频繁发生的请求(就像IRC协议一样)。如果用户在一秒钟内提交了10行或更多,请忽略该用户。
  • 做一个快速的垃圾邮件检查(有很多算法可以做到这一点)——坚持使用简单的启发式方法,否则会给服务器带来负担。像“免费”或“伟哥”这些词的出现。给用户一个分数,表示他们可能是垃圾邮件或机器人。当它被破坏时,从服务器引导它们。

希望能有帮助!如果没有,很抱歉。这是我在StackOverflow上的第一个答案。:P页

这就是websocket连接的全部目的。你可以通过握手来验证它们。有关更多信息,请参见此处: http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-08

我非常确定websocket连接会将在非websocket连接中建立的所有cookie发送到您的应用程序。您应该能够查询Django的会话存储以获取连接的cookie,并确定socket所属的用户。

退房:https://docs.djangoproject.com/en/1.3/topics/http/sessions/#configuring-the-session-engine

相关问题 更多 >