在socketio连接中包装express应用程序是不好的做法吗?

时间:2018-03-16 23:27:28

标签: node.js security express socket.io

我正在制作网络游戏,如果我的路线看起来像:

import Control.Monad.Trans.Maybe (MaybeT, runMaybeT)
import Control.Monad.Writer (MonadTrans, Writer, lift, runWriter, tell, when)
import ListT (ListT, toList) -- Volkov's list-t package

logging = True

write x = when logging write' where
    write' :: MonadTrans m => m (Writer [String]) ()
    write' = lift $ tell [x]

f :: ListT (Writer [String]) String
f = do
    write "Hello from f"
    return "ABC"

g :: MaybeT (Writer [String]) Int
g = do
    write "Hello from g"
    return 123

main :: IO ()
main = do
    print $ runWriter $ toList f
    print $ runWriter $ runMaybeT g

任何人都可以使用邮递员或卷曲等方式将数据发布到mywebsite.com/create_account,我的网站将开始为他们创建帐户,即使他们甚至不在我的网页上。

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

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

我对它进行了测试,看起来这样,如果您实际连接到网页,则只能发布到/ create_account。

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

1 个答案:

答案 0 :(得分:0)

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