【问题标题】:Is it bad practice to wrap express app within socketio connection?用套接字 io 连接包装 express 应用程序是不好的做法吗?
【发布时间】:2018-08-26 02:47:06
【问题描述】:

我正在制作一个网页游戏,如果我有一条看起来像这样的路线:

app.post('/create_account', (req, res) => {
    var email = req.body.email
    var pass = req.body.pass
    res.json({response: "created"})
})

任何人都可以使用 postman、curl 或其他工具将数据发布到 mywebsite.com/create_account,即使他们不在我的网页上,我的网站也会开始为他们创建帐户。

我发现了一个有趣的解决方法,我想知道这是否安全,甚至是一个好主意。基本上我将我的应用程序路由包装在 socket.io 连接中:

io.on('connection', function(socket) {
    app.post('/create_account', (req, res) => {
        //code goes here
    })
})

我测试过了,看来这种方式只有在实际连接到网页的情况下才能发帖到/create_account。

这样做有什么缺点(如果有的话)?如果这是一个坏主意,那么如果人们不在我的网站上,有什么更好的方法可以防止他们发布数据。

【问题讨论】:

  • 或者,您可以使用 csrf-tokens。
  • 你不能这样做。您正在为每个传入的 socket.io 连接添加一个新的重复 app.post() 处理程序。对于到达该路由的每个请求,它们中的每一个都会触发,并且您将拥有各种重复项。你不能用这种方式做任何你想做的事情。

标签: node.js security express socket.io


【解决方案1】:

@Ruslan 关于 CSRF 令牌的建议是合理的,可能是您最好的选择,将所有内容包装在 socket.io 中似乎过于复杂。这是一个这样做的库:https://github.com/expressjs/csurf

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-24
    • 2017-02-02
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多