datatype.text会针对什么进行验证?

时间:2018-12-20 20:52:27

标签: asp.net-mvc validation

我有一个生产应用程序,该应用程序在我们的CWE-100安全扫描中被击中。我知道这是已弃用的项目,但是它仍显示在我的报告中。

此刻,我只看到要采取的两项操作,

  1. 处理每个项目并清除报告中的缺陷
  2. 标记该缺陷并评论它已过时,然后与我的安全团队联系。

关于修复它,我发现向变量添加数据类型属性可以删除警告。这是我已修复的代码段

[DataType(DataType.Text)]
public string Name { get; set; }
...
[DataType(DataType.Text)]
[Required(ErrorMessage = "Please enter documentation.")]
public string Documentation{ get; set; }

我找不到Microsoft提供的有关此数据类型属性验证依据的任何文档。如果可以,即使经过一些次要测试,我仍然可以将复制的任何字符输入为此显示的文本框中。

是否有理由添加此属性,还是我会浪费时间?

1 个答案:

答案 0 :(得分:1)

免责声明:这只是我对阅读source code的理解(随时可以纠正我)

DataTypeAttribute)是ValidationAttribute(源自ValidationAttribute),您需要将其传递给Enum(也称为DataType)。

验证属性需要重写IsValid方法,该方法在模型绑定上执行,并且需要确定该值是否有效。自定义验证器的外观如下:

public class CustomValidator : ValidationAttribute  
{  
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)  
    {  
        // do some validation

        if (/* validation passes */)
        {
            return ValidationResult.Success;  
        }
        else 
        {
            return new ValidationResult("Validation message..."); 
        }
    }  
}  

现在,回到DataTypeAttribue(这是一个验证属性),您需要将其传递给DataType枚举:

public enum DataType
{
    Custom = 0,
    DateTime = 1,
    Date = 2,
    Time = 3,
    Duration = 4,
    PhoneNumber = 5,
    Currency = 6,
    Text = 7,
    Html = 8,
    MultilineText = 9,
    EmailAddress = 10,
    Password = 11,
    Url = 12,
    ImageUrl = 13,
    CreditCard = 14,
    PostalCode = 15,
    Upload = 16
}

据我所知,DataTypeAttribtue所做的就是为DataType.DateDataType.TimeDataType.Currency ...添加一些格式(也设置了{{ 1}})

此外,您还具有EmailAddressAttributePhoneAttributeUrlAttribute等验证属性,这些属性是从_dataTypeStrings派生的,并对这些特定类型进行了额外的验证:

现在,您可以使用这些验证属性:

DataTypeAttribute

据我所知,再次将public class MyModel { [Phone] // <- executes the IsValid method of PhoneAttribute public String Home { get; set; } [DataType(DataType.PhoneNumber)] // <- does NOT execute IsValid method of PhoneAttribute public String Mobile { get; set; } [EmailAddress] // <- executes the IsValid method of EmailAddressAttribute public String Email { get; set; } [DataType(DataType.Currency)] // <- does the Currency formatting public decimal Price { get; set; } [DataType(DataType.Date)] // <- does the Date formatting public DateTime ReleaseDate { get; set; } [DataType(DataType.Text)] // <- does NOT add any validation/formatting public string Name { get; set;} /* * this is the only scenario that I can think of, for using: [DataType(DataType.Text)] */ [DataType(DataType.Text)] public object someKey { get; set;} } 添加到[DataType(DataType.Text)], 不会增加任何价值,最好不要使用它来使代码更小,更简洁,更易于理解...