【发布时间】: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