2012-10-01 94 views
1

我正在开发一个使用socket.io的实时网络应用程序。我关心的是,在客户端通过<script>/socket.io/socket.io.js</script>加载socket.io js文件时,它将io实例公开为全局对象。现在,如果你打开Chrome开发者工具,现在可以创建如何在客户端保护socket.io?

var socket = io.connect(); 

人到服务器的连接,现在可以发出事件和发送恶意数据到服务器正在监听到客户端发出 事件。我有这个在我的客户端代码为例:

(function (sio) { 
    var socket = sio.connect(); 
    // some code here... 
    // once a user submitted the comment, it will emit an comment:create event to the 
    // server 
    socket.emit("comment:create", comment); 
}(io)); 
在Chrome开发者工具

,我可以创建一个连接,然后发出了一些恶意的参数相同的事件可能会崩溃,我的应用程序一样传递一个null作为第二个论点。有没有办法来防止这种问题?

编辑:我目前的解决方案是在我的客户端代码中创建io实例的本地副本,然后将全局io对象设置为null以防止发生另一个连接。

回答

1

当客户端初始化(HTTP)连接并将其存储为会话变量时,服务器端代码是否创建某种(相当随机的)令牌。要求客户端将令牌作为其发送的每个socket.io消息的一部分,并拒绝任何不匹配的消息。

+0

谢谢你!因为我使用的是socket.io,io.set('authorization')是我应该在会话中存储令牌的时候。 – James

+0

@詹姆斯你能给我一些例子吗? –