我怎么能确定内存被覆盖 - Javascript

时间:2013-12-01 01:24:22

标签: javascript security web-applications

将敏感信息加载到内存中时,我希望确保将其安全删除。我正在开发一个Javascript Web应用程序,我想确保在值更改时安全地覆盖我的变量。只是简单地重新分配值,或者为了覆盖内存中的值,还需要做些额外的事情。

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

我认为这会因浏览器而异。所有主流浏览器是否都在防范读取浏览器内存的其他进程?

3 个答案:

答案 0 :(得分:4)

这取决于您需要的安全级别。如果你的意思是在同一页面上运行的未来Javascript程序无法访问,是的,你所要做的就是重新分配指向它的变量。如果你的意思是,安全,计算机的硬件级分析无法找到信息,Javascript就不是你想要的语言。

答案 1 :(得分:1)

JavaScript甚至不支持指针或任何方式来控制它对内存的作用。你根本无法确保覆盖事实上发生了。你可以做的最好的事情是取消变量和捕食垃圾收集器的神,它将重用他们持有的新东西的空间。

另外,无论如何,尝试保护内存中的这些信息毫无意义,sinse:

  1. 您的主要关注点应该是它将通过网络传输;
  2. 如果客户端计算机遭到破坏,则只能从内存中读取它;
  3. 简单地调试或掺杂JavaScript代码以便向您提供信息更容易。
  4. 如果您依赖此JavaScript“安全性”来保护您不希望用户访问的信息,请立即停止,因为您不能。即使您对代码进行模糊处理,也不需要花费10分钟让有经验的程序员撤消它,它甚至不符合Security through obscurity的条件,它根本就没有安全性。

答案 2 :(得分:0)

如果你想要替换一个值,那么只需为它分配一个不同的值 - 后台内存结构会发生什么变得完全被开发人员混淆,所以没有办法告诉发生了什么(除非代码是开源的)并且你想围绕内部进行翻找)以及它是否在每个浏览器中都是一致的(可疑的)或者它是否被安全处理(没有在运行时自己查找内存,再次怀疑)但是对于标量值然后它“应该“不重新分配内存,因此分配不同的值可能就足够了。”

如果要在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关键字与内存管理无关;相反,它只是从对象中删除属性,因此无法引用它们。如果删除了对对象的所有引用,则将调度该对象以进行垃圾回收,并且可以释放内存,但是您无法控制此过程。

基本上,如果你想要(de-)分配/覆盖内存的安全性,那么不要使用JavaScript。