У меня есть простое тестовое приложение Electron, которое запускает приложение Angular в процессе рендеринга.Это угловое приложение имеет две страницы: логин и аккаунт.После входа в систему с использованием имени пользователя и пароля вы будете перенаправлены на страницу учетной записи, где затем сможете выйти из системы.
Вход в систему
Компонент
@Component({
selector: 'app-login',
templateUrl: 'login.component.html',
})
export class LoginComponent {
password: string;
username: string;
constructor(private router: Router) {
}
submit() {
let usernameBuffer = Buffer.from(this.username, 'utf8');
let passwordBuffer = Buffer.from(this.password, 'utf8');
// Do some Node stuff with the buffers...
// Now done with the buffers. Clearing the properties like this
// doesn't seem to help.
usernameBuffer = null;
passwordBuffer = null;
this.router.navigate(['/account']);
}
}
HTML
<form id="login-page" (ngSubmit)="submit()">
<label for="username">Username</label><br>
<input id="username" type="text" name="Username" [(ngModel)]="username" required><br><br>
<label for="password">Password</label><br>
<input id="password" type="password" name="Password" [(ngModel)]="password" required><br><br>
<button type="submit">Log In</button>
</form>
Учетная запись
Компонент
@Component({
selector: 'app-account',
templateUrl: 'account.component.html',
})
export class AccountComponent {
}
HTML
<p>You are logged in!</p>
<p><a routerLink="/login">Log Out</a></p>
Тестовое приложение
Если интересно, полный исходный код этого тестового приложения можно найти здесь: https://github.com/kspearrin/electron-memtest.Просто клонируйте его, затем запустите npm i
и npm run electron
.
Используя Windows 10, после входа пользователя в приложение и перехода на страницу учетной записи я могу зайти в диспетчер задач и выполнитьдамп памяти для создания файла .DMP.Открыв этот файл .DMP в Блокноте, я могу выполнить поиск и увидеть имя пользователя и пароль в виде открытого текста.
В этом тесте я вошел в систему с именем пользователя «testusername» и паролем «testpassword-123».
Это происходит, только если я создаю Node Buffers с данными имени пользователя и пароля, как показано выше в LoginComponent
.Кажется, что буферы никогда не освобождаются из памяти.Я подумал, что, возможно, сборка мусора в Node просто необходима для запуска, однако я позволил этому приложению работать весь день, и значения по-прежнему сохраняются при создании новых файлов .DMP.Может быть, мне нужно принудительно запустить сборку мусора?
- Почему эти буферы остаются в памяти?
- Как правильно очистить эти конфиденциальные данные?