代码之家  ›  专栏  ›  技术社区  ›  Jonathan Wilbur

如何在内存中归零?[复制]

  •  0
  • Jonathan Wilbur  · 技术社区  · 5 年前

    当将敏感信息加载到内存中时,我要确保它在以后被安全地擦除。我正在开发一个Javascript web应用程序,我想确保当值更改时,我的变量被安全地覆盖。是简单地重新分配足够的值来完成这项工作,还是需要做一些额外的工作来覆盖内存中的值。

    或者这是一个无望的原因,将永远导致我的应用程序的安全问题?

    我想这会随着浏览器的不同而有所不同。所有主流浏览器都会防止其他进程读取浏览器内存吗?

    0 回复  |  直到 11 年前
        1
  •  4
  •   Michael Lorton    11 年前

        2
  •  1
  •   Matt Morgan    5 年前

    JavaScript甚至不支持指针或任何方式来控制它对内存的任何操作。您根本无法确定是否确实发生了重写。你所能做的最好的就是取消变量的设置,并向垃圾回收神祈祷,它会重新利用它们存放的空间和新的东西。

    另外,试图在内存中保护这些信息是毫无意义的,因为:

    1. 只有当客户端计算机受到损害时,才有可能从内存中读取它;
    2. 简单地调试或掺假JavaScript代码以使其向您提供信息是更容易的。

    如果你依靠JavaScript的“安全性”来保护你不想让用户访问的信息,现在就停止,因为你不能。即使你混淆了代码,一个有经验的程序员不需要10分钟就可以撤销它,它甚至不符合 Security through obscurity ,根本没有安全保障。

        3
  •  0
  •   MT0    11 年前

    如果要删除对JavaScript中对象属性的引用,则可以使用:

    var x = { data: 'here', other_stuff: 'there' };
    // do stuff
    delete x.data; // remove the data attribute from the x object.
    // do more stuff
    delete x; // remove the x attribute from the current scope.
    

    在这种情况下- delete 关键字和内存管理无关;相反,它只是从对象中删除属性,这样就不能引用它们。如果删除了对某个对象的所有引用,则该对象将被调度进行垃圾回收,内存可能会被释放,但您无法控制此过程。

    基本上,如果你想安全地分配/重写内存,那么就不要使用JavaScript。