我有一个生产应用程序,该应用程序在我们的CWE-100安全扫描中被击中。我知道这是已弃用的项目,但是它仍显示在我的报告中。
此刻,我只看到要采取的两项操作,
关于修复它,我发现向变量添加数据类型属性可以删除警告。这是我已修复的代码段
[DataType(DataType.Text)]
public string Name { get; set; }
...
[DataType(DataType.Text)]
[Required(ErrorMessage = "Please enter documentation.")]
public string Documentation{ get; set; }
我找不到Microsoft提供的有关此数据类型属性验证依据的任何文档。如果可以,即使经过一些次要测试,我仍然可以将复制的任何字符输入为此显示的文本框中。
是否有理由添加此属性,还是我会浪费时间?
答案 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.Date
,DataType.Time
和DataType.Currency
...添加一些格式(也设置了{{ 1}})
此外,您还具有EmailAddressAttribute,PhoneAttribute,UrlAttribute等验证属性,这些属性是从_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)]
,
不会增加任何价值,最好不要使用它来使代码更小,更简洁,更易于理解...