开放式websocket连接的安全问题是什么?

Roc*_*man 10 html5 websocket

我正在构建一个使用websockets的应用程序.我只是允许经过身份验证的用户在登录后打开与服务器的websocket连接,并且已被授予会话ID.

  1. 一旦我与经过身份验证的用户打开了websocket连接,当前的"页面"就会保存打开的websocket连接的详细信息.此时,这种连接是否相对安全?或者我应该在我自己的应用程序级协议中的每个消息上检查一些令牌吗?

  2. 是否存在任何已知的跨站点伪造类型安全问题?有人可以通过让经过身份验证的用户以某种方式执行某些javascript来合作开放的websocket - 从而能够利用开放的websocket连接?

fre*_*ish 5

1)连接是安全的,当您在服务器端使其安全时。因此,您必须通过 WebSockets 发送会话 ID,在服务器端验证它是否正确并将连接标记为有效。HTTP 的身份验证更困难,因为 HTTP 是无状态的(与原始 TCP 不同)。当然,劫持 TCP 连接还是有可能的,但没那么容易(例如参见这篇文章),如果它发生了,那么没有任何东西(TLS 除外)可以帮助您。

2)好吧,如果你用这样的匿名函数包装你的 WebSocket 连接:

(function() {
    var ws = new WebSocket("ws://localhost:1000");
    // some other stuff
})();
Run Code Online (Sandbox Code Playgroud)

那么没有外部 JavaScript 将能够访问它,所以你不必担心。

  • 关于上面的#1 - 是的,我正在检查原始握手中的 cookie,因为它是建立连接的 HTTP GET 请求。cookie 必须通过先前的身份验证具有有效的会话 ID。所以我安全地授予连接......只是不清楚现在这个连接打开而不验证每条消息可能存在哪些漏洞...... (2认同)