Blazor Editform中的验证是否安全,例如,如果将必需的属性应用于InputText字段,黑客无法绕过此特性将无效文本发送到服务器,那么InputSelect或select项怎么办?选择列表中的所有项是否都已验证,以便无法将超出范围的值发送到服务器?主要是在服务器端。
发布于 2020-02-22 07:40:10
我不认为验证和安全有任何关系?这都是关于UI的流动性和效率。应该在服务器上执行安全检查,而不是在客户端( WebAssembly Blazor或server )执行。
通过使用所需的属性您“强制”用户输入一个值,我们还可能强迫用户提供给定类型的值,例如由数字字符组成的值;黑客可能会更改这些值,就像他在JavaScript中所做的那样,这就是为什么安全验证是在服务器上执行的,而不是在客户机上执行的.
是否应该在HandleValidSubmit (编辑表单的提交事件)中再次验证,甚至在Blazor端?
不,不应该。如果执行了HandleValidSubmit方法,这意味着您的特定模型通过了验证。为什么要再次验证它呢?但是,我知道这个问题是从哪里来的。您的要求是正确的:尽管您的模型已经通过验证,但它可能会被黑客更改到数据库的方式,无论您是使用客户端Blazor还是服务器端Blazor。客户端Blazor和服务器端Blazor在这方面的区别在于,当您使用第一种模式时,就像我前面提到的那样,只对流动性的抖动执行验证,例如,不允许用户输入60岁的文本,而是60岁的文本。现在,在不使用和强制执行此约束的情况下,服务器上的代码可能会引发异常。可以肯定的是,数据库应该抛出一个错误,因为它希望获得数值,而不是字符串值。为了防止服务器和客户端之间的这种抖动,我们使用模型验证,就像在Razor Pages应用程序和MVC应用程序中一样,在这些应用程序中,验证是在客户端和服务器上执行的。顺便说一句,当您添加托管的WebAssembly Blazor应用程序时,会为您创建一个包含三个文件夹的解决方案。其中一个名为Shared,它应该包含您的模型。它之所以被称为共享,是因为它被WebAssembly Blazor的客户端和服务器端使用。
但是,当您使用第二个(我正在讨论的是差异)时,您的代码总是在服务器上执行,并且只有Html差异被传递给服务器端Blazor应用程序的客户端Signlr,并且它,客户机Signlr,将Html差异数据应用到Html元素。
一般来说,Razor应用程序和MVC应用程序对于两种风格的Blazor并没有什么区别。客户端验证是为了方便使用和提高效率,服务器端验证是为了强制执行验证规则。
应该在HandleValidSubmit中再次验证吗?
顺便说一句,除了验证属性执行的验证之外,有时您可能还需要使用应该在服务器上执行的验证.在这种情况下,您可以在必须添加到OnSubmit组件的EditForm属性的处理程序方法中实现此附加验证。
希望这能帮上忙。
https://stackoverflow.com/questions/60349808
复制相似问题