我正在开发一个使用 socket.io 的实时网络应用程序。我担心的是,当在客户端通过 this 加载 socket.io js 文件时<script>/socket.io/socket.io.js</script>
,它会将 io 实例公开为全局对象。现在,如果您打开 chrome 开发人员工具,您现在可以使用以下命令创建与服务器的连接
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 以防止建立另一个连接。