gpt4 book ai didi

asp.net - 允许更广泛的输入范围后验证危险字符MVC模型字段的正确方法

转载 作者:行者123 更新时间:2023-12-02 19:01:05 25 4
gpt4 key购买 nike

我们的初始情况:

  • 我们的网站上有 ClientValidationEnabled =true
  • 我们使用的是 MVC 5,并且有一个用户名 + 密码的模型
  • 我们需要在密码中允许使用“<”“>”,因为数据会发送到另一个允许使用更广泛字符的现有系统。

提交密码(例如“<特殊密码>”)时,会引发 HttpRequestValidationException。

问题描述:

我们希望仅在模型的密码属性中允许使用其他字符。

当前找到的方法:

  • 禁用某个级别的验证(总体、页面或仅特定方法)。缺点:这适用于输入中的所有字段(甚至更多,具体取决于所选级别)。
  • 不使用模型并直接使用表单字段并使用此方法:other question -> Deferred ("lazy") request validation
  • 按照 Greg 的建议指定 [AllowHtml]

问题:

这两种方法都需要对未验证字段进行额外验证。对于这些验证,我们可以编写自定义验证,但我们更喜欢使用现有的众所周知的解决方案。

有什么好的建议来验证该字段吗?

最佳答案

我有一个 MVC 5 应用程序,您的问题让我有兴趣进行一些测试。事实证明,许多使用“<”和“>”符号的值都可以正常工作。

    例如
  • password>、password<>、password/>都被忽略
  • 会导致问题

所以,实际上,只有包含这些字符的密码子集才会让您感到悲伤。

您已经提到了快速但肮脏的解决方案,即在 Controller 操作级别关闭此功能:

[HttpPost, ValidateInput(false)]
public ActionResult SomeAction(SomeModel model)
{
// ...
}

但我认为您真正想做的是为单个字段禁用此功能。这可以通过在模型中的给定属性上使用[AllowHtml]标签来完成。

[AllowHtml]
public string Password{ get; set; }

http://msdn.microsoft.com/en-us/library/system.web.mvc.allowhtmlattribute(v=vs.118).aspx

假设您有自己的登录表,并且正在为您的模型使用 Entity Framework 生成的类,那么可以将其作为元数据应用到同一命名空间内的另一个部分类。

namespace MyProject.Models
{
[MetadataType(typeof(UserMetaData))]
public partial class User
{
}

public class UserMetaData
{
[AllowHtml]
public string Password { get; set; }
}
}
<小时/>

最后,一旦你让这一切正常工作,我注意到了一个奇怪的行为。如果我允许在密码中使用这些特殊字符,并且登录失败并返回到登录页面,它将返回一个空白页面......好像我正在点击其他安全功能。然而,我仍然可以使用包含特殊字符的登录名来登录,没有问题......

因此,我最终必须让我的登录操作始终重定向到另一个操作(即使在这些失败时),以防止登录尝试失败时包含密码的奇怪特殊字符导致空白页面。

关于asp.net - 允许更广泛的输入范围后验证危险字符MVC模型字段的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22454303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com