前言
ASP.NET Core MVC 的 Login ,通常會接一個 LoginViewModel ,而該 Class 中大多會有 Password 的屬性,如下,
1 | public string Password { get; set; } |
程式透過 Checkmarx 掃過後,就會說它有 Heap Inspection 的問題,直指向 string Password ,如下,
解法
我們需要將 string Password 改成 SecureString Password 。
但是 Client 傳進來的 Password 卻是 string ,要如何轉成 SecureString 呢?
這時就需要透過 Model Binder 來幫忙將 Model 中的 Password 從 string 轉成 SecureString 。
所以我們先建立 SecureString 的 Extend Methods 來幫忙轉換,如下,
1 | //using System.Security; |
建立 SecureStringModelBinder 來將 Model 中型態為 SecureString 的屬性讀取 Client 的值,將它轉成 SecureString ,如下,
1 | public class SecureStringModelBinder : IModelBinder |
- 註: SecureStringModelBinder 假設 Model 屬性除了 SecureString 外,都可以透過 String 去指定它的值
再來就是在 Model Class 上宣告使用的 ModelBinder 如下,
1 | [ ] |
所以 Client 就可以送字串的 Password , Bind 到 Model 時,就被轉成 SecureString 了,
透過 swagger UI 來測試,
在 Controller 收到的 Model ,已透過 SecureStringModelBinder 轉換完成,如下,
而在 Service 的 Method 中,如果需要將它轉回 string 比較的話,就再呼叫 ToText() 即可。