Проблемы безопасности в приложении WPF - PullRequest
2 голосов
/ 06 марта 2012

Я создаю приложение WPF, которое будет обрабатывать много конфиденциальных данных, таких как имена пользователей, пароли, электронные письма и т. Д. Все эти данные отображаются в текстовых полях и паролях в приложении. Когда приложение закрывается, мне нужно удалить все данные, которые были в памяти, чтобы никто не мог потом извлечь их.

Не могли бы вы рассказать мне несколько рекомендаций или советов о том, на что мне следует обратить внимание, или о методах, которые я могу использовать, чтобы сделать этот проект максимально безопасным?

Спасибо

Ответы [ 3 ]

3 голосов
/ 06 марта 2012

Данные не останутся в памяти после завершения выполнения программы, но теоретически они могут быть прочитаны во время работы программы.Вы можете попробовать использовать SecureString s: http://msdn.microsoft.com/en-us/library/system.security.securestring.aspx

Кроме того, элемент управления PasswordBox уже использует SecureString, так что вы хорошо справляетесь с этой задачей.

1 голос
/ 05 сентября 2013

Я думаю, вы беспокоитесь о чем-то, о чем не стоит беспокоиться.

Если кто-то имеет физический доступ к машине и хочет украсть конфиденциальную информацию, вы уже проиграли игру.

Хотя имена пользователей и пароли в данный момент могут отсутствовать в памяти, пользователь может просто установить кейлоггер и получить его при следующем запуске приложения.

0 голосов
/ 05 сентября 2013

.Net строки неизменяемы и интернированы. Неизменность делает строки неизменяемыми после их создания. Стажировка заставляет CLR использовать один экземпляр строки с одинаковым содержимым. Это также затрудняет избавление от строки.

С MSDN

.. память, выделенная для интернированных объектов String, вряд ли будет освобождается до тех пор, пока не закончится среда CLR. причина в том, что ссылка CLR на интернированный объект String может сохраняться после вашей заявки или даже домена приложения, завершается.

Вы можете использовать SecureString, но это не очень удобно, так как не многие элементы управления WPF поддерживают его, кроме PasswordBox.

Например, бывают случаи, когда вам нужно показать пользователю пароль, но без преобразования SecureString обратно в обычную строку это невозможно. Это возвращает к проблемам, которые мы намереваемся смягчить.

Так что, по моему мнению, WPF / C # не будет хорошей языковой платформой-кандидатом для приложения с конфиденциальными данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...