gpt4 book ai didi

javascript - Nodejs/expressjs 中请求参数的字符串不可变性问题

转载 作者:行者123 更新时间:2023-11-28 05:15:03 25 4
gpt4 key购买 nike

我正在开发一个项目,我的安全团队提出了一个问题,涉及我们在字符串中捕获的敏感信息以及该信息在内存堆中的存在情况。

根据我在互联网上发现的最佳实践,将所有变量清除为空,以清除内存中的原始值。但字符串是不可变的,即使我们将变量设置为 null,它们也会存在于内存中。所以字符串的值将永远存在。

Image demo for string memory allocation

所以我认为这个值会保留在内存中直到下一个 GC 周期。设置 null 不会立即清除它。

我的一个建议是,不要使用字符串来完成此类任务。他们建议我在nodejs 中使用缓冲区。

现在我有一些假设和一些问题需要建议。

  1. 我们可以从 body-parser 模块以缓冲区的形式获取请求正文。但在这种情况下,如果我想在数据库等中插入记录,我不确定如何使用该信息。

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
}
}));

  • 如果我从 request.body.key 创建 Buffer 并将其传递给某个函数并使用缓冲区的 tostring() 方法来使用它,然后我将缓冲区清零以删除原始值,那么这个 toString() 方法会创建文本值的内存空间,当我清除缓冲区时不会消失?
  • 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;
    }

  • nodejs 为所有 request.body 参数分配内存是如何工作的? body 对象中的每个字符串值都是不可变的吗?并永远存在于内存中?如果是,如果有人转储堆并有权访问所有敏感信息怎么办?或者我完全错了?
  • 想法/建议?

    斯戈亚尔

    最佳答案

    But Strings are immutable and they will be there in memory even if we set variables to null. so the value of string will always be there.

    与任何其他值一样,该字符串将一直存在,直到垃圾收集器被激活为止。将变量设置为 null 会导致该值变成垃圾(即没有任何东西指向它),因此最终会从堆中清除。

    关于javascript - Nodejs/expressjs 中请求参数的字符串不可变性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41037482/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com