首页 > 解决方案 > EditForm 中的 Blazor 选择和输入验证

问题描述

Blazor Editform 中的验证是否安全,例如,如果将必需属性应用于 InputText 字段,黑客无法绕过此并向服务器发送无效文本,那么 InputSelect 或选择项呢?选择列表中的所有项目是否都经过验证,以便无法将超出范围的值发送到服务器?主要在 Blazor 服务器端。

标签: blazor

解决方案


我认为验证与安全性无关?这一切都与 UI 的流动性和效率有关。安全检查应该在服务器而不是客户端(WebAssembly Blazor App 或 Server Blazor App)上执行。

通过使用Required 属性,您“强制”用户输入一个值,我们也可能强制用户提供给定类型的值,例如由数字字符组成的值;并且黑客可能会更改这些值,就像他在 JavaScript 中所做的那样,这就是为什么在服务器上而不是客户端上执行安全验证的原因......

即使在 Blazor 服务器端,我是否应该在 HandleValidSubmit(编辑表单的提交事件)中再次验证?

不,你不应该。如果执行了 HandleValidSubmit 方法,则意味着您的特定模型通过了验证。为什么要再次验证它?但是,我知道这个问题的出处......而且你问得对:虽然你的模型已经通过验证,但无论你使用客户端 Blazor 还是服务器,它都可能在访问数据库的过程中被黑客更改侧 Blazor。客户端 Blazor 和服务器端 Blazor 在这方面的区别在于,当您使用第一个时,会执行模型验证,正如我之前提到的,仅针对流动性的抖动,例如,不允许用户输入文本为 60 岁,但 60 岁。现在,如果不使用和强制执行此约束,服务器上某处的代码可能会引发异常。为了确定,您的数据库应该抛出错误,因为它希望获得数值,而不是字符串值。为了防止从服务器到客户端的这种混乱,我们使用模型验证,就像在 Razor Pages 应用程序和 MVC 应用程序中一样,在客户端和服务器上都执行验证。顺便说一句,当您添加托管的 WebAssembly Blazor 应用程序时,会为您创建一个包含三个文件夹的解决方案。一个名为 Shared,它应该包含您的模型。它被称为 Shared 是因为它被 WebAssembly Blazor App 的客户端和服务器端使用。为您创建了一个包含三个文件夹的解决方案。一个名为 Shared,它应该包含您的模型。它被称为 Shared 是因为它被 WebAssembly Blazor App 的客户端和服务器端使用。为您创建了一个包含三个文件夹的解决方案。一个名为 Shared,它应该包含您的模型。它被称为 Shared 是因为它被 WebAssembly Blazor App 的客户端和服务器端使用。

但是,当您使用第二个(我说的是差异)时,您的代码始终在服务器上执行,并且只有 Html 差异被传递给您的服务器端 Blazor 应用程序的客户端 Signlr,它是客户端 Signlr,将 Html 差异数据应用于 Html 元素。

一般来说,Razor Pages 应用程序和 MVC 应用程序对于 Blazor 的两种风格没有任何区别。客户端验证是为了易于使用和提高效率,服务器端验证是为了强制遵守验证规则。

我是否应该在 HandleValidSubmit 中再次验证

顺便说一句,有时您可能需要使用,比如说应该在服务器上执行的验证,除了验证属性执行的验证......在这种情况下,您可以在您将要使用的处理程序方法中实现此附加验证必须添加到 EditForm 组件的 OnSubmit 属性

希望这可以帮助...


推荐阅读