如何在客户端保护socket.io?
我正在开发一个使用socket.io的实时Web应用程序。 我关心的是,在客户端通过这个<script>/socket.io/socket.io.js</script>
加载socket.io js文件时,它将io实例公开为全局对象。 现在,如果你打开chrome开发者工具,你现在可以创build一个到服务器的连接
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开发人员工具中,我可以创build一个连接,然后使用一些恶意参数发出相同的事件,这些恶意参数可能会使应用程序崩溃,例如传递null作为第二个参数。 有没有办法来防止这个问题?
编辑:我目前的解决scheme是在我的客户端代码中创build一个io
实例的本地副本,然后将全局io
对象设置为null,以防止另一个连接。
当客户端进行初始(HTTP)连接并将其存储为会话variables时,让服务器端代码创build某种(相当随机的)令牌。 要求客户端将令牌作为其发送的每个socket.io
消息的一部分,并拒绝任何不匹配的消息。