我正在开发一个项目,我的安全团队已经提出了一个问题,即我们在字符串中捕获的敏感信息以及内存堆中是否存在该信息。
根据我在互联网上找到的最佳做法是将所有变量清除为null以从内存中清除原始值。但是字符串是不可变的,即使我们将变量设置为null,它们也会存在于内存中。所以string的值总是在那里。
Image demo for string memory allocation
所以我认为这个值会保留在内存中直到下一个GC循环。设置null不会立即消除掉。
我的一个建议是,不使用字符串来执行此类任务。他们建议我在nodejs中使用缓冲区。
现在我有一些假设和一些问题需要建议。
app.use(bodyParser.json({
verify: function(req, res, buf, encoding) {
req.rawBody = buf;
console.log("rawBody", req.rawBody); // print buffer info
console.log("rawBody in json", JSON.parse(req.rawBody.toString())); // print json format of request body
}
}));
callSomeSecurityFun (Buffer.from(request.body.password));
function callSomeSecurityFun (passwordBuf) {
var encryptedPassword = someencryptionLib.encryptPass (passwordBuf.toString(),'<some key>', '<some algo>');
passwordBuf.fil (0);// clearing the buffer.
return encryptedPassword;
}
思想/建议?
sgoyal
答案 0 :(得分:0)
但是Strings是不可变的,即使我们将变量设置为null,它们也会存在于内存中。所以string的值总是在那里。
与任何其他值一样,字符串将一直存在,直到垃圾收集器被激活。将变量设置为null
会导致值变为垃圾(即没有任何内容指向它),因此最终将从堆中清除它。