Как удалить TextBox с паролем из памяти?

У меня простая форма входа.

После того, как у пользователя есть цифровой пароль, мне нужно уничтожить текстовое поле в памяти.

Достаточно ли этого?

txtPassword.Text = string.Empty;
txtPassword = null;
System.GC.Collect(); 

Прагматически обзвон GC - вещь не очень хорошая.

Amit 11.05.2018 15:05

Нет. Текст все еще может быть в TextBox; некоторая другая переменная или объект, на который вы можете ссылаться. Возможно, вы захотите рассмотреть WPF PasswordBox и SecureString

MickyD 11.05.2018 15:06

Просто txtPassword.Text = string.Empty; не работает?

Amit 11.05.2018 15:07

@MickyD Я передаю текст в SecureString

daniele3004 11.05.2018 15:12

@ Амит нет. Это ничего не сделает для любого потенциального потерянного объекта string с открытым текстовым паролем.

MickyD 11.05.2018 15:13

@MickyD Я не рассматривал какой-либо объект string, который был получен из txtPassword.Text, предположим, что такой исключительной строки может не быть, выполнения txtPassword.Text = string.Empty будет недостаточно для перезаписи исходного значения его из его ссылки (памяти)

Amit 11.05.2018 15:18

@Amit нет гарантии, что память будет очищена, если вы вызовете GC

JanMer 11.05.2018 15:20

И что ты после этого делаешь с этим паролем?

Evk 11.05.2018 15:20

@Amit, вы можете назначить .Text все, что захотите. Пароль все еще может быть в памяти где-то незащищенным

MickyD 11.05.2018 15:20

Возможный дубликат Как правильно освободить память в C#

daniele3004 11.05.2018 15:21

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

MickyD 11.05.2018 15:29

Возможно, не по теме - Возможный дубликат Лучший способ защитить страницу Winform?. Предлагается не использовать пароль вообще и использовать проверку подлинности Windows. Посмотрите комментарий Ганса Пассанта на этой странице

MickyD 11.05.2018 15:33
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
12
348
2

Ответы 2

Думаю, вас заинтересует SecureString

An instance of the System.String class is both immutable and, when no longer needed, cannot be programmatically scheduled for garbage collection; that is, the instance is read-only after it is created, and it is not possible to predict when the instance will be deleted from computer memory. Because System.String instances are immutable, operations that appear to modify an existing instance actually create a copy of it to manipulate. Consequently, if a String object contains sensitive information such as a password, credit card number, or personal data, there is a risk the information could be revealed after it is used because your application cannot delete the data from computer memory.

A SecureString object is similar to a String object in that it has a text value. However, the value of a SecureString object is pinned in memory, may use a protection mechanism, such as encryption, provided by the underlying operating system, can be modified until your application marks it as read-only, and can be deleted from computer memory either by your application calling the Dispose method or by the .NET Framework garbage collector.

Я передаю строку данных и после нее в SecureString, но мне нужно уничтожить TextBox с помощью пароля и перехода String Variable в память.

daniele3004 11.05.2018 15:16

Недостаточный. WinForms (предмет вопроса OP) не поддерживает SecureString для свойства Text или аналогичного, в отличие от PasswordBox WPF. PasswordBox даже не имеет свойства string Text, вместо этого это SecureString SecurePassword. Это создает основу для безопасных строк, подходящих для паролей. Попытка использовать SecureString для WinForms в качестве второстепенного шага рискованна.

MickyD 11.05.2018 15:16

@ daniele3004 - перенос данных с string на SecureString бесполезен (потому что string все еще находится в памяти, и вы не избавитесь от него так легко; вот в чем, по сути, ваш вопрос). Безопасность SecureString достигается только с помощью никогда не иметь "полного" string в (небезопасной) памяти. Вы добавляете его символ за символом, нажатие клавиши за нажатием. Как в примере в связанной статье MSDN.

Corak 11.05.2018 15:24

Установите его в:

txtPassword.PasswordChar = '\0';

Пожалуйста, добавьте (краткое) объяснение. Насколько я понимаю, вы намереваетесь переписать строку, чтобы она больше не содержала текста и больше не содержала пароль. Не могли бы вы развить свой ответ?

lnjuanj 22.10.2020 10:48

Другие вопросы по теме