Как очистить чувствительные Node.js-буферы из дампов памяти процесса рендеринга Electron? - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть простое тестовое приложение 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».

.dmp shows password

Это происходит, только если я создаю Node Buffers с данными имени пользователя и пароля, как показано выше в LoginComponent.Кажется, что буферы никогда не освобождаются из памяти.Я подумал, что, возможно, сборка мусора в Node просто необходима для запуска, однако я позволил этому приложению работать весь день, и значения по-прежнему сохраняются при создании новых файлов .DMP.Может быть, мне нужно принудительно запустить сборку мусора?

  1. Почему эти буферы остаются в памяти?
  2. Как правильно очистить эти конфиденциальные данные?

1 Ответ

0 голосов
/ 21 декабря 2018

Ноль fill их:

usernameBuffer.fill(0)
passwordBuffer.fill(0)
...