为什么 Signal R 中的 URL 中传递了连接令牌?

问题描述 投票:0回答:2

我有一个网站可以处理渗透测试期间软件提出的所有安全问题。请参考以下屏幕截图:

项目中使用的是jquery.signalR-2.4.1(ASP.NET MVC)。我需要向安全团队解释上述 URL 的使用,以及为什么它显示在 GET 请求下。该应用程序是否存在任何威胁?如果是,如何从 URL 内的查询字符串中删除连接字符串?如果它是一个内置的过程或方法,那么它的确切用途是什么?

asp.net signalr
2个回答
3
投票

它是连接令牌,而不是会话/安全令牌。这记录在 Microsoft 的 SignalR 文档的安全部分中。我建议您的安全团队参考此信息,因为他们不知道此处的差异及其使用方式。特别是下面的粗体部分:

这是万一链接发生变化的情况 -

SignalR 的连接令牌不是身份验证令牌。它用于确认发出此请求的用户与创建连接的用户是同一用户。连接令牌是必需的,因为 ASP.NET SignalR 允许连接在服务器之间移动。该令牌将连接与特定用户相关联,但不断言发出请求的用户的身份。为了正确验证 SignalR 请求,它必须具有一些其他令牌来断言用户的身份,例如 cookie 或不记名令牌。但是,连接令牌本身并不声明请求是由该用户发出的,仅声明令牌中包含的连接 ID 与该用户相关联。

由于连接令牌不提供自己的身份验证声明,因此它不被视为“会话”或“身份验证”令牌。 获取给定用户的连接令牌并在作为其他用户进行身份验证的请求(或未经身份验证的请求)中重放它将会失败,因为请求的用户身份与令牌中存储的身份不匹配。


0
投票

在 SignalR 中有两种类型的令牌。屏幕截图中的似乎是一个连接,很可能是渗透测试团队混合了屏幕截图,因为这是一些低级问题。真正的问题是 SignalR 确实通过 HTTP GET URL 参数传递

access_token

并且在文档中说明了何时使用 Bearer token 进行身份验证。似乎还添加了一条注释,表明它被认为是潜在的安全风险,可以找到更多详细信息:

但是坦率地说,该文档是错误的。授权标头比 GET URL 参数更安全。由于 URL 可以记录在不同的地方,例如:

  • 服务器访问日志(由于各种原因主要是监控,还有WAF)
  • 当员工的笔记本电脑安装了公司证书时,可能成为公司代理,因此可以监控他们的流量
  • 在浏览器的历史记录中,如果机器本地受到攻击,则可以从历史记录中提取令牌

不幸的是,总而言之,这个问题似乎没有适当的系统解决方案,并且应该实施一些非标准解决方案,我想在大多数情况下,这将归结为以业务可接受的风险为理由跳过它。

© www.soinside.com 2019 - 2024. All rights reserved.