有关 Websocket 网站(例如 Blazor-Server)的安全问题

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

我目前一直在使用 Blazor-Server,并且非常喜欢它。 然而,我已经意识到很多事情是如何“在幕后”工作的,现在我对它的安全方面提出质疑......

如果我们使用微软默认的 Blazor-Server 模板并访问“Counter”页面,我们会发现它非常简单,只有以下代码:

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }
}

此页面包含一种可以在单击按钮时调用的方法,如下所示:

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

由于大量 blazor 服务器魔法正在幕后进行,因此这种解释的高级解释是“当您单击该按钮时,Websocket 向服务器发送数据包”。 由于可能存在安全漏洞,这让我有点担心。 例如,如果我放入一个很小的 if 语句,试图达到只有管理员才能看到并单击此按钮的效果,如下所示:

@if (user == AdminRole)
{
    <button class="btn btn-primary" @onclick="IncrementCountAdmin">Click me</button>
}

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }

    private void IncrementCountAdmin()
    {
        currentCount += 5;
    }
}

由于这只是从客户端的 websocket 到服务器来回发送数据包,那么任何拥有数据包操作工具的客户端都无法调用此 IncrementCountAdmin 方法吗? 这对我来说非常麻烦,但是也许 blazor-server 的幕后还有更多的魔力,它还能以某种方式验证数据包?

如果有人有任何相关信息,我将不胜感激地了解有关 blazor 服务器应用程序的更多信息:)

我一直在使用默认的 blazor-server 应用程序来测试+创建此示例场景。

asp.net asp.net-core security blazor blazor-server-side
1个回答
0
投票

我只能回答你的具体问题。您实施的应用程序安全性取决于您的应用程序的要求。您可以在 UI 层和/或表示层中实现安全性。

在您给出的示例中,如果渲染按钮,则渲染器中只有一个事件连接到

IncrementCountAdmin
。因此,即使您可以进入普通用户的 SignalR 会话(困难),并尝试将单击事件发送到渲染器,也没有连接事件侦听器来调用
IncrementCountAdmin

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