ASP.NET MVC 5 - представлена модель SecureString
У меня есть приложение C# ASP.net MVC, где сотни пользователей ежедневно вводят очень конфиденциальные данные. Клиентский браузер подключается к моему бэкэнду через сквозное зашифрованное соединение TLS, поэтому я не беспокоюсь о том, что данные не будут зашифрованы HTML-формой.
Когда конфиденциальные данные поступают в мой бэкэнд, они используются через другое соединение TLS и не хранятся ни на дисках, ни в базе данных, кроме строковых переменных в памяти. Это проблема, потому что мне нужно как можно скорее избавиться от конфиденциальных данных, чтобы в случае, если злоумышленник получил доступ к используемому диску, он не смог получить конфиденциальную информацию из дампа памяти. (диск работает в экземпляре в облаке, поэтому доступ к диску скомпрометированной учетной записи не так сложен, как раньше)
Я знаю, что могу использовать SecureString, чтобы иметь возможность звонить Dispose()
на переменную после того, как я использовал его, чтобы убедиться, что он удаляется из памяти, что хорошо. Тем не менее, я не уверен, как я могу использовать это с Model
, Ниже приведен фрагмент кода.
public class InputModel
{
Private String confidential;
// Getters and Setters
}
public ActionResult Index(InputModel inputModel)
{
//Create a SecureString "secureString" and store inputModel.confidential in
}
Теперь я могу распоряжаться secureString в любое время, но inputModel.confidential будет оставаться в памяти, что делает использование SecureString неактуальным.
Как я могу справиться с этим?
Что нужно иметь в виду:
- Мой сервер довольно безопасен. Я не ожидаю, что SecureString поможет мне зашифровать переменную от вируса, который может работать на сервере. Я просто хочу убедиться, что никто не сможет извлечь учетные данные из дампа памяти (или, по крайней мере, значительно уменьшить количество учетных данных, которые можно получить), если к диску обращаются.
- Я использую TLS во всех клиент-серверных коммуникациях. Мне не нужно ничего, чтобы быть зашифрованным приложением.