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