【发布时间】:2021-06-07 17:35:53
【问题描述】:
我想确保 Blazor Server 应用能够安全抵御跨域攻击,尤其是针对 Blazor Server 正在使用的 SignalR 集线器。据我所知,相关应用无需启用任何跨域连接。
Microsoft 有一个 Blazor Server Threat Mitigation 文档,其中说明了跨域保护的必要性(请参阅此处:Threat Mitigation)。该文档建议“打开恶意 WebSocket 也是可能的”,并且
- Blazor 服务器应用可以跨域访问,除非额外 采取措施防止它。要禁用跨域访问, 通过添加 CORS 中间件来禁用端点中的 CORS 管道并将 DisableCorsAttribute 添加到 Blazor 端点元数据或通过配置限制允许的来源集 SignalR 用于跨域资源共享。
- 如果启用了 CORS,额外的 根据 CORS,可能需要采取步骤来保护应用程序 配置。如果 CORS 已全局启用,则可以禁用 CORS 通过将 DisableCorsAttribute 元数据添加到 Blazor 服务器中心 在端点上调用 MapBlazorHub 后的端点元数据 路线建设者。
如果我正确理解上述内容,我需要“通过将 CORS 中间件添加到管道并将 DisableCorsAttribute 添加到 Blazor 端点元数据来禁用端点中的 CORS”,但到目前为止我一直无法弄清楚如何做这个。 [编辑:我认为我的回答涵盖了这部分问题。]
上述文章还引用了关于 SignalR 安全性的另一篇文章(参见此处:Security considerations in ASP.NET Core SignalR),其中说“CORS 提供的保护不适用于 WebSockets。有关 WebSockets 的来源限制,请阅读 WebSockets origin restriction”。
关于 WebSockets 源限制的文章描述了如何为 WebSockets 配置跨源保护,但是在配置 Blazor Server 使用的 WebSockets 的上下文中没有对此进行解释,我还没有弄清楚如何做到这一点。
如何确保我的 Blazor Server 应用程序可以安全地防止通过其 WebSocket 或任何其他相关连接机制向 SignalR 集线器发送跨源请求?
【问题讨论】:
标签: websocket cors signalr blazor-server-side