asp.net 有关WebSocket网站(如Blazor-Server)的安全问题

tv6aics1  于 5个月前  发布在  .NET
关注(0)|答案(1)|浏览(82)

我目前一直在使用Blazor-Server,并且非常喜欢它。然而,我已经意识到很多事情是如何在“幕后”工作的,现在我质疑它的安全性。
如果我们使用微软默认的Blazor-Server模板并访问“计数器”页面,我们会注意到它非常简单,只有以下代码:

@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服务器的幕后还有更多的魔力,它也可以验证数据包。
如果任何人有任何关于这方面的信息,我将非常感谢了解更多关于blazor服务器应用程序:)
我一直在使用默认的blazor服务器应用程序来测试和创建这个示例场景。

k75qkfdt

k75qkfdt1#

我只能回答你的具体问题。
您实现的应用程序安全性取决于应用程序的需求。您可以在UI层和/或表示层中实现安全性。
在你给出的例子中,如果按钮被渲染,在渲染器中只有一个连接到IncrementCountAdmin的事件。所以即使你可以进入普通用户的SignalR会话(困难),并尝试发送一个点击事件到渲染器,也没有连接到调用IncrementCountAdmin的事件侦听器。

相关问题