Asp.net mvc datatype.text根据什么进行验证?
我有一个生产应用程序,它被我们的安全扫描击中了。我知道这是一个不推荐的项目,但是它仍然显示在我的报告中 目前我只看到要采取两项行动Asp.net mvc datatype.text根据什么进行验证?,asp.net-mvc,validation,Asp.net Mvc,Validation,我有一个生产应用程序,它被我们的安全扫描击中了。我知道这是一个不推荐的项目,但是它仍然显示在我的报告中 目前我只看到要采取两项行动 处理每个项目并清除报告上的缺陷 标记该漏洞并注释它已被弃用,然后与我的安全团队联系 关于修复它,我发现向变量添加datatype属性可以消除警告。下面是我修复的一个片段 [DataType(DataType.Text)] public string Name { get; set; } ... [DataType(DataType.Text)] [Required(
[DataType(DataType.Text)]
public string Name { get; set; }
...
[DataType(DataType.Text)]
[Required(ErrorMessage = "Please enter documentation.")]
public string Documentation{ get; set; }
我找不到Microsoft提供的有关此数据类型属性验证的任何文档。如果是这样的话,从一些次要的测试中,我仍然可以将复制的任何字符输入为此显示的文本框中
是否有理由添加此属性,或者我是在浪费时间 免责声明:这只是我从阅读中理解的(请随意更正) ()是一个
ValidationAttribute
(从ValidationAttribute
派生而来),您需要向其传递一个(也称为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
enum:
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.Date
、DataType.Time
和DataType.Currency
添加一些格式。。。(同时设置\u 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;}
}
公共类MyModel
{
[电话]//感谢您的回答!我将仔细检查并确保所有案例都与我在此处所述的相同,然后只与我的安全团队交谈。您知道文本验证的依据是什么吗?我在您的答案、日期、电子邮件、密码等中使用了其他内容,但我不知道文本的用途。@JRHigdon:我已经更新了答案…截至目前为止我理解[DataType(DataType.Text)]
不起任何作用,如果您在字符串上使用它。