【问题标题】:How to secure socket.io in client side?如何在客户端保护 socket.io?
【发布时间】:2012-10-01 17:20:24
【问题描述】:

我正在开发一个使用 socket.io 的实时网络应用程序。我担心的是,当在客户端通过 <script>/socket.io/socket.io.js</script> 加载 socket.io js 文件时,它会将 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 以防止建立另一个连接。

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    让您的服务器端代码在客户端进行初始 (HTTP) 连接时创建某种(相当随机的)令牌并将其存储为会话变量。要求客户端将令牌包含在它发送的每条socket.io 消息中,并拒绝任何不匹配的消息。

    【讨论】:

    • 谢谢你!因为我使用的是 socket.io,所以 io.set('authorization') 是我应该在会话中存储令牌的时候。
    • @James 你能给我发一些例子吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 2019-04-15
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 2017-06-29
    相关资源
    最近更新 更多