前言
ASP.NET MVC 5 的 Login ,通常會接一個 LoginViewModel ,而該 Class 中大多會有 Password 的屬性,如下,
1 | public string Password { get; set; } |
程式透過 Checkmarx 掃過後,就會說它有 Heap Inspection 的問題,直指向 string Password 屬性。
在 ASP.NET MVC 5 則可以直接使用 SecureString 來取代 string 。
解法
這時就需要透過 Model Binder 來幫忙將 string 轉成 SecureString 。
先建立 SecureString 的 Extend Methods,可參考 Heap Inspection in MVC - SecureString 這篇裡面的程式碼。
建立 SecureStringModelBinder 來將 string 轉成 SecureString ,如下,
1 | public class SecureStringModelBinder : System.Web.Mvc.IModelBinder |
完成 Binder 後,就可以在 Global.asax.cs 的 Application_Start 加到 ModelBinders.Binders ,如下,
1 | protected void Application_Start() |
而在 Service 的 Method 中,如果需要將它轉回 string 比較的話,就再呼叫 ToText() 即可。