При хранении секретной строки (например, пароля или ключа) плохой практикой является использование System.String
, поскольку строки являются неизменяемыми, и вы не можете запланировать сборку мусора для удаления их из памяти.Microsoft рекомендует использовать SecureString
, чтобы избежать этого, когда содержимое также шифруется в состоянии покоя.См. MSDN: System.Security.SecureString
. Я не вижу способа привязки параметра SecureString
в .NET Core Controller, платформа выдает JsonSerializationException
для параметра, когдавыполнение сопоставления модели с внутренним сообщением об исключении Could not cast or convert from System.String to System.Security.SecureString.
Таким образом, анализатор JSON уже сделал из него string
, и секрет остается незашифрованным в памяти.
Каркас не может связать даже char[]
, который является обычным решением для работы с секретными строками (хотя он и не зашифрован, char[]
являются изменяемыми, поэтому могут быть перезаписаны для удаления их из памяти).Сбой с похожим исключением.