前言
在前一篇 Heap Inspection in ASP.NET Core MVC - SecureString 中介紹如何將 string Password 改使用 SecureString 型態。
但是在 .NET Core 並不建議再使用 SecureString 。
所以我們可以改使用 byte[] 來取代。
解法
建立 string 轉 byte[] 及 byte[] 轉回 string 的擴充方法,如下,
1 | public static class ProtectedByteArrayExtension |
建立 登入 Model 的 Model Binder (ProtectedByteArrayModelBinder),如下,
1 | public class ProtectedByteArrayModelBinder : IModelBinder |
這裡只是將 Heap Inspection in ASP.NET Core MVC - SecureString 裡面的 SecureStringModelBinder 從 SecureString 改成呼叫 ToProtected 回傳 byte[] 的內容。
設定登入Model類別所使用的 ModelBinder ,如下
1 | [ ] |
因為有使用 IDataProtectionProvider 來保護字串轉成 byte[],所以在 Startup.cs 的 ConfigureServices 方法要加入 services.AddDataProtection();
1 | public void ConfigureServices(IServiceCollection services) |
再來 Client 就可以送字串的 Password , Bind 到 Model 時,就被轉成 byte[] 了,
透過 swagger UI 來測試, 在 Controller 收到的 Model ,已透過 ProtectedByteArrayModelBinder 轉換完成,如下,
而在 Service 的 Method 中,如果需要將它轉回 string 比較的話,就再呼叫 ToText(IDataProtectionProvider物件) 即可。
- 註: 上面有多使用 IDataProtectionProvider 去保護 string 轉成 byte[] 的內容,在 Checkmarx 中,沒使用 protector.Protect 也是會 Pass 的哦!
參考資料
Get started with the Data Protection APIs in ASP.NET Core
An introduction to the Data Protection system in ASP.NET Core