JavaScript 安全 : force deletion of sensitive data

标签 javascript cordova encryption garbage-collection immutability

假设我的应用有一段敏感数据,例如一个加密 key ,因为它正在执行本地加密/解密,我希望在注销时将数据从我的设备内存中完全清除。这将防止我的手机落入坏人之手,防止有人访问当前 JS 内存以检索解密 key 。

According to Mozilla , JS 中的所有数据类型都是不可变的。而且,据我所知,没有办法强制进行垃圾回收,尤其是在浏览器中。有没有什么 JS 方法可以确保数据从内存中完全清除?

如果不能,是否可以使用其他一些广泛支持的技术(如 IndexedDB 或 WebSQL)清除这些数据? (我假设加密/解密可以专门在 IndexedDB 或 WebSQL 层完成——这对我来说听起来有点疯狂,因为我假设这些数据仍然驻留在某个 JS 字符串中)。

像 ObjectiveC 或 JAVA 这样的母语是唯一的出路吗?

或者,我是不是多疑了,应该假设在 JS 中准备好进行垃圾收集的任何东西都会在及时的庄园中自动清除?

最佳答案

是的,字符串等是不可变的,可能会在内存中保留很长时间,直到下一个 GC 周期。

为了克服这个问题,您将 secret 存储在一个可变对象中。例如,在一个基本数组中:

var secret = ['s','e','c','r','e','t'];

现在,您可以简单地删除信息,即清空数组元素:

var len = secret.length
for (var i=0; i<len; ++i) {
    secret[i] = '0'
}

这就是为什么许多使用处理密码和 secret 的 Java API 需要一个 char[]/byte[] 数组,以便您之后可以将它们清空。

关于JavaScript 安全 : force deletion of sensitive data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28511970/

相关文章:

java - 使用 persistence.xml 的 JPA 的数据库连接位于哪里?

javascript - 如何从 ArrayBuffer 中获取二进制字符串?

javascript - 网站工作,但不是在 iphone 上。 XMLHttpRequest() 错误

ios - 使用 cordova-cli 构建 iOS 平台时出错

java - 如何使用 Phonegap Android 截图插件旋转截图图像

javascript - Div 内容跨越到页面页脚的问题

c# - 我正在制作我的第一个加密程序,有什么建议吗?

c# - Android和C#之间的加密

javascript - 华硕 zenfone 5 t00j AES 256 加密问题

javascript - componentDidMount 未按预期执行