让我解释一下这个标题。
假设我们有一个包含密码的字符串,当我们将这个pw发送到BE散列和盐渍时,我们想要摆脱这个值。
所以说,这是不可行的:
var pw = 'somePw';
// later
pw = 'someGarbage';
字符串是不可变的所以我们不会重写内存中的值但是创建一个新的值并且旧的值仍然存在于内存中但是由GC自由解除引用仍然可以摆脱它立即 - >不安全。
我如何克服这个问题?!
答案 0 :(得分:0)
我不确定JavaScript内部是如何工作的,它可能依赖于实现,但也许你可以将值存储为对象的属性,然后只删除属性。由于删除属性会将其用于垃圾收集,然后免费,但我不知道该值是否仍然存在于内存中。
var passwordObject = { pass: "somepass" };
delete passwordObject.pass;
答案 1 :(得分:0)
您可以将pw存储在对象中,并在完成后使用删除操作符。
var user = {
password: "pw"
}
delete user.password
您也可以设置pw = null
在垃圾收集周期发生后,这两种方法都会释放内存空间。
道格拉斯·克罗克福德喜欢后一种方法,而不是第一种方法http://javascript.crockford.com/memory/leak.html 因为他解释了与第一种方法相关的一些内存泄漏问题。但是,我不认为这些仍然是现代浏览器中的一个问题。