如何解决MVC viewmodel的堆检测漏洞?

时间:2016-11-24 14:52:25

标签: c# asp.net asp.net-mvc

Checkmarx报告了一个关于拥有Password属性字符串的Heap检查漏洞。此属性是模型的一部分,在提交登录表单时会受到约束。 ASP.NET MVC中是否有一种方法可以使用除常规字符串之外的任何其他内容来绑定表单中的密码?

到目前为止,我已尝试将属性类型更改为char []或SecureString,但在这种情况下,表单不会将数据绑定到它。

public class LoginModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
}

2 个答案:

答案 0 :(得分:0)

使用SecureString而不是String。

SecureString实例提供比String更多的数据保护。 从一次一个字符的源创建字符串时,String在内存中创建多个中间,而SecureString只创建一个实例。

String对象的垃圾收集是不确定的。此外,由于其内存未固定,因此在移动和压缩内存时,垃圾收集器将生成String值的其他副本。相反,分配给SecureString对象的内存是固定的,可以通过调用Dispose方法释放该内存。

https://msdn.microsoft.com/en-us/library/system.security.securestring(v=vs.110).aspx

答案 1 :(得分:-2)

将密码字段重命名为其他内容...例如“alienSecurity”,那就是CheckMarx无法捕获它:)