我有一个简单的电子测试应用程序,在渲染过程中运行一个角度应用程序。这个角度应用程序有两个页面:登录和帐户使用用户名和密码登录后,将重定向到“帐户”页,然后可以在该页注销。
登录
组成部分
@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文件,我可以执行搜索并以明文形式查看用户名和密码。
在这个测试中,我使用用户名“test username”和密码“test password-123”登录。
只有当我创建
Node Buffers
使用用户名和密码数据,如上面的
LoginComponent
. 缓冲区似乎永远不会从内存中释放出来。我想也许节点垃圾收集最终只需要运行,但是,我让这个应用程序整天运行,并且在创建新的.DMP文件时,值仍然存在也许我需要强制运行垃圾回收?
-
为什么这些缓冲区会留在内存中?
-
如何正确清理这些敏感数据?