Node.js 使用Buffer.allocUnsafe()和Buffer.alloc()的情况是什么?

Node.js 使用Buffer.allocUnsafe()和Buffer.alloc()的情况是什么?,node.js,Node.js,我对使用Buffer.allocUnsafe()和Buffer.alloc()感到困惑,我知道Buffer.allocUnsafe()使用预填充数据或旧缓冲区创建缓冲区,但如果Buffer.alloc()使用零填充数据创建缓冲区,我为什么需要这样的东西呢 alloc(大小、填充、编码)->返回一个新的初始化缓冲区 指定大小的。此方法比Buffer.allocUnsafe(size)慢,但可确保新创建的缓冲区实例从不包含可能敏感的旧数据 allocUnsafe(大小)->缓冲区未初始化,分配的 内

我对使用
Buffer.allocUnsafe()
Buffer.alloc()
感到困惑,我知道
Buffer.allocUnsafe()
使用预填充数据或旧缓冲区创建缓冲区,但如果
Buffer.alloc()
使用零填充数据创建缓冲区,我为什么需要这样的东西呢

alloc(大小、填充、编码)->返回一个新的初始化缓冲区 指定大小的。此方法比Buffer.allocUnsafe(size)慢,但可确保新创建的缓冲区实例从不包含可能敏感的旧数据

allocUnsafe(大小)->缓冲区未初始化,分配的 内存段可能包含可能会丢失的旧数据 敏感的在不完全覆盖内存的情况下使用Buffer.allocUnsafe()创建的缓冲区,可能会在读取缓冲区内存时导致旧数据泄漏


注意:虽然使用Buffer.allocUnsafe()有明显的性能优势,但必须格外小心,以避免在Node.js
中的应用程序中引入安全漏洞。Buffer
是对RAM的抽象,因此如果以不安全的方式分配,缓冲区实例中甚至存在一些源代码的高风险。尝试运行
console.log(Buffer.allocUnsafe(10000).toString('utf-8'))
,我保证您会在stdout中看到一些代码

分配是一个同步操作,我们知道单线程Node.js对同步的东西感觉不太好。不安全分配比安全分配快得多,因为缓冲区santarization步骤需要时间。安全分配是安全的,但存在性能权衡


我建议首先坚持安全分配,如果最终性能低下,可以考虑实现不安全分配的方法,而不暴露私有内容。请记住,
allocUnsafe
方法之所以使用“不安全”一词是有原因的。例如,如果您要通过一些合规性认证,如PCI DSS,我很肯定QSA会注意到这一点,并且会有很多问题。

我想刷新缓冲区需要时间。如果您需要性能,并且您知道您将完全填充缓冲区,则无需首先刷新它。感谢您的评论谢谢您的回答我想补充一点,如果您100%确定您正在覆盖所有数据,则使用unsafeAlloc是完全安全的。例如复制操作
const bufferCopy=Buffer.allocUnsafe(oldBuffer.length);oldBuffer.copy(bufferCopy)
这是
allocUnsafe
的完美用例之一。是的,缓冲区API在V8堆之外运行,这意味着它直接分配RAM内存(如果使用不安全的方法,内存可能不是空的)