gpt4 book ai didi

node.js - 拦截(并可能拒绝)Web 套接字升级请求

转载 作者:太空宇宙 更新时间:2023-11-03 22:36:20 25 4
gpt4 key购买 nike

我有一个 Node.js 服务器,我正在向其发送 Web 套接字升级请求。此请求的授权 header 包含登录信息,我需要将其与数据库条目进行比较。我不确定如何在执行数据库查询回调之前阻止 Web 套接字连接打开。

以下是我目前正在做的事情的简化:

var Express = require('express')
var app = Express()
server = app.listen(app.get("port"), function () {})
server.on("upgrade", function (request, socket) {
//Query database
//On success set "authenticated" flag on request (later accessed through socket.upgradeReq)
//On failure abort connection
})

这是可行的,但有一段短暂的时间,套接字处于打开状态,但我尚未验证授权 header ,因此恶意用户有可能发送/接收数据。我通过使用“经过身份验证”标志来减轻实现中的这种风险,但似乎必须有更好的方法。

我尝试了以下操作,但它们似乎拦截了除升级请求之外的所有请求:

Attempt #1: 
app.use(function (request, response, next) {
//Query database, only call next if authenticated
next()
})

Attempt #2:
app.all("*", function (request, response, next) {
//Query database, only call next if authenticated
next()
})

可能值得注意的是:我也有一个 HTTP 服务器,它使用相同的端口并接受注册和登录的 POST 请求。

感谢您的帮助,如果需要更多信息,请告诉我。

最佳答案

我不确定这是否是正确的 HTTP 协议(protocol)通信,但它似乎适用于我的情况:

server.on('upgrade', function (req, socket, head) {
var validationResult = validateCookie(req.headers.cookie);
if (validationResult) {
//...
} else {
socket.write('HTTP/1.1 401 Web Socket Protocol Handshake\r\n' +
'Upgrade: WebSocket\r\n' +
'Connection: Upgrade\r\n' +
'\r\n');
socket.close();
socket.destroy();
return;
}
//...
});

关于node.js - 拦截(并可能拒绝)Web 套接字升级请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28017698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com