10

我正在构建一个使用 websockets 的应用程序。我只允许经过身份验证的用户在登录并获得会话 ID 后打开与服务器的 websocket 连接。

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

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

4

1 回答 1

5

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

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

(function() {
    var ws = new WebSocket("ws://localhost:1000");
    // some other stuff
})();

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

于 2013-04-28T21:44:31.953 回答