javascript - 打开 Websocket 之前进行身份验证

标签 javascript node.js websocket

通过身份验证保护 Websocket 的最先进方法是什么?

问题是,每个人都可以下载 js 文件并查看页面连接的 websocket 的主机和端口。 我想到的唯一方法是:打开一个 wss(安全 websocket)并发送例如凭据,如果凭据错误,则关闭服务器端的连接?

最佳答案

首先,WebSocket 请求有一个 Origin HTTP header ,指示客户端运行的域。因此,如果您的站点是 www.whatever.com,并且您收到以 www.smartass.com 作为源的 WebSocket 请求,您可以拒绝它。这将防止其他人无意中让用户连接到您的服务。也就是说,仍然可以通过伪造该 header 从任何地方访问您的服务,但必须是有目的的。

WebSockets使用HTTP协商,因此它们可以在协商过程中携带cookie。如果您的 WebSocket 服务与站点的其余部分位于同一域或子域中,则您可以共享 cookie。例如,当您的用户成功登录时,将返回一个 cookie,他将在每次与服务器(包括 WebSocket 服务)的 HTTP 交互中使用该 cookie 来验证自己的身份。只需拒绝任何没有有效 cookie 的请求即可。

如果它们位于不同的域中,您可以按照您所说的操作,使用登录请求/登录响应消息来验证连接。

关于javascript - 打开 Websocket 之前进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27886404/

相关文章:

angular - 在 Angular 和 rxjs 中重新连接 websocket?

javascript - 将输入文本与选项值匹配并自动选择它

javascript - 如何更改绑定(bind)到 Razor 页面上模型的特定文本的字体颜色?

javascript - 如何将表格附加到DIV

javascript - TS2488 : Type 'string | null' must have a '[Symbol.iterator]()' method that returns an iterator

javascript - 尝试附加附件通过 request.post 发送时,表单数据库抛出无法读取 null 属性的错误

node.js - 约翰尼五世蓝牙连接问题

javascript - react-editext中 'onSave ()'函数如何传两个参数?

javascript - sails 客户端(浏览器)如何监听从不同端口发出(爆破)的套接字消息?

javascript - 在闭包中设置变量