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

2023-11-24

我有一个 Node.js 服务器,我正在向其发送 Web 套接字升级请求。此请求的授权标头包含登录信息,我需要将其与数据库条目进行比较。我不确定如何阻止 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
})

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

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

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 协议通信,但它似乎适用于我的情况:

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;
  }
  //...
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

拦截(并可能拒绝)Web 套接字升级请求 的相关文章

随机推荐

  • PHP 中的连接 ECHO 语法

    我做了一个小功能 WordPress 使用echo Some code switch linktype case next echo p class next previous post link link prevthumbnail p
  • 在跨平台应用程序中使用 snprintf

    我正在编写一个 C 程序 预计可以使用所有主要编译器进行编译 目前我正在 Linux 机器上的 GCC 上进行开发 并在提交代码之前在 MSVC 上进行编译 为了使交叉编译变得容易 我正在编译 ansi and pedantic旗帜 这很有
  • ASP.NET Identity(使用IdentityServer4)获取外部资源oauth访问令牌

    我已经阅读了 IdentityServer4 的文档 并将其设置为使用 Microsoft Office 365 作为登录提供程序 当用户登录后 我想创建一个按钮 他可以在其中允许我的应用程序使用 graph microsoft com 的
  • 以编程方式获取代码的 Big-O 效率

    我想知道是否有任何自动方法可以 至少粗略地 确定给定函数的 Big O 时间复杂度 如果我绘制 O n 函数与 O n lg n 函数的图表 我想我将能够直观地确定哪个是哪个 我认为必须有一些启发式解决方案可以自动完成此操作 有任何想法吗
  • “import foo.*”不应该包含子包“foo.bar.*”吗?

    在学习 Java 时 我想到了许多教程中相当令人困惑的属性 考虑示例教程中的以下两个导入 import java awt import java awt event 第一行显然导入了 java awt 包 第二行导入了 awt 的子包 但是
  • mongoose.connection() 和 mongoose.createConnection() 之间的混淆

    我已经研究了 mongoose 三天 对这两种方法的使用有点困惑 我知道 mongoose connection 将来会被弃用 问题是 当我尝试转换 从 mongoose connection 到 mongoose createConnec
  • GCDAsyncUdpSocket 与组播发送和接收

    在第一种方法中 我创建客户端 服务器应用程序 基于样本项目 将一些数据发送到服务器 Legend sender address reciver ip port reciver port reciver address null since
  • 具有不可编辑/不可取消后缀的 EditText [重复]

    这个问题在这里已经有答案了 我为我的一项活动创建了一个布局 用户可以在其中的某些 EditText 小部件中插入值 我需要其中一些 EditText 必须具有不可编辑的后缀 如 cm mm 等 用户插入值后 我将解析这些 EditText
  • JavaScript 在 ul 中查找 li 索引

    我正在尝试通过 Javascript 中的 id 查找列表项的索引 例如 我有 5 个项目的列表 给定一个元素 我想找出它在列表中的位置 下面是我希望构建的代码 它使用 onclick 处理程序来查找正在工作的元素 然后我只需要以某种方式找
  • Sequelize targetKey 不起作用

    我正在尝试使用sequelize关联两个模型 Note 和 Resource 但是 targetKey 没有按预期工作 注意模态 module exports function sequelize DataTypes return sequ
  • 解构深层属性

    我最近开始使用 ES6解构赋值语法并开始熟悉这个概念 我想知道是否可以使用相同的语法提取嵌套属性 例如 假设我有以下代码 let cagingIt foo bar Nick Cage 我知道我能够访问摘录foo通过执行以下操作将其放入变量中
  • 使用 API 的 Ionic 3 登录身份验证 - 无法读取 null 的属性“json”

    我正在使用 API 在 Ionic 3 中进行身份验证 但在登录过程中 它显示错误 无法读取 null 的属性 json 这是我的providers gt restapi gt restapi ts import HttpClient fr
  • 客户端发送的请求语法错误 ().+Spring , RESTClient

    我正在使用 JSON 对象使用 Spring MVC 当我尝试从 RESTClient 发送 JSON 对象时 我得到 HTTP 状态 400 客户端发送的请求在语法上不正确 这是我的控制器 ObjectMapper mapper new
  • .net core (csproj) global.json 'projects' 等效项

    使用 net core project json 我曾经通过将源代码的路径添加到 nuget 包和源代码之间进行切换projectsglobal json 中的字段 完成此操作后 它将添加它可以在该路径中找到的所有项目 这些项目可以替换我引
  • 使用 Delaunay 三角剖分进行插值

    有一个形状像某种扭曲抛物面的浊点 我想使用 Delaunay 三角剖分来插值这些点 我尝试过其他技术 例如样条线 但没有设法强制执行所需的行为 我想知道是否有一种快速的方法来使用结果scipy spatial Delaunay我可以给出 x
  • “初始化 Java 工具”期间发生内部错误。在 Eclipse 启动时

    我在启动时遇到这个奇怪的错误 我的环境可能出了什么问题 这是错误 gt ENTRY org eclipse core jobs 4 2 2010 12 30 17 56 32 545 MESSAGE An internal error oc
  • 当出现平局时,熊猫如何决定排序顺序?

    熊猫0 12 0 例如 在下面的 DataFrame 中 为什么它会混淆索引 看一下 4 索引从 1 15 6 7 开始 pandas 用于决定如何排序的推理是什么 我怀疑索引会保持顺序以获得相等的值 mydf pd DataFrame n
  • 修复了 g++ 4.9.1 中奇怪的“%a”格式行为?

    编译器 来自 Nuwen 发行版的 64 位 MinGW G 4 9 1 在 Windows 8 1 下 Code ifdef INCLUDE IOSTREAM include
  • 通过 xmlstarlet 中的文本值选择节点

    我正在尝试提取 Value 节点的值 其中 Key 节点是 bash shell 中的 state
  • 拦截(并可能拒绝)Web 套接字升级请求

    我有一个 Node js 服务器 我正在向其发送 Web 套接字升级请求 此请求的授权标头包含登录信息 我需要将其与数据库条目进行比较 我不确定如何阻止 Web 套接字连接打开 直到执行数据库查询回调之后 以下是我目前正在做的事情的简化 v