我正在构建一个使用websockets的应用程序。我只是允许经过身份验证的用户在登录后打开与服务器的websocket连接,并且已被授予会话ID。
一旦我与经过身份验证的用户打开了websocket连接,当前的“页面”就会保存打开的websocket连接的详细信息。此时,这种连接是否相对安全?或者我应该在我自己的应用程序级协议中的每个消息上检查一些令牌吗?
是否存在任何已知的跨站点伪造类型安全问题?有人可以通过让经过身份验证的用户以某种方式执行某些javascript来合作开放的websocket - 从而能够利用开放的websocket连接?
答案 0 :(得分:4)
1)当您在服务器端安全时,连接是安全的。因此,您必须通过WebSockets发送会话ID,在服务器端验证它是否正确并将连接标记为有效。 HTTP的身份验证更加困难,因为HTTP是无状态的(与原始TCP不同)。当然它仍然可以劫持TCP连接,但它并不那么容易(例如参见this article),如果它发生了,那么没有任何东西(TLS除外)可以帮助你。
2)好吧,如果你用你的匿名函数包装你的WebSocket连接:
(function() {
var ws = new WebSocket("ws://localhost:1000");
// some other stuff
})();
然后没有外部JavaScript可以访问它,因此您不必担心这一点。