我对使用var env = karate.env;
//here, you can override env with a default value if the value isn't an authorized one :
if (env != "pre_production" && env != "production"){
env = "pre_production";
}
和Buffer.allocUnsafe()
感到困惑,我知道Buffer.alloc()
创建了一个带有预填充数据或旧缓冲区的缓冲区,但是如果{{ 1}}创建一个零填充数据的缓冲区
答案 0 :(得分:1)
Buffer.alloc(size,fill,encoding)->返回一个新的初始化的Buffer 指定大小的。此方法比Buffer.allocUnsafe(size)慢,但是可以保证新创建的Buffer实例绝不包含可能敏感的旧数据。
Buffer.allocUnsafe(size)->缓冲区未初始化,已分配 内存段可能包含潜在的旧数据 敏感。在不完全覆盖内存的情况下使用由Buffer.allocUnsafe()创建的Buffer可能会使旧数据在读取Buffer内存时泄漏。
注意:尽管使用Buffer.allocUnsafe()具有明显的性能优势,但必须格外小心,以避免在应用程序中引入安全漏洞
答案 1 :(得分:1)
在Node.js中,Buffer
是对RAM的抽象,因此,如果以不安全的方式分配它,则存在缓冲区实例中甚至包含某些源代码的高风险。尝试运行console.log(Buffer.allocUnsafe(10000).toString('utf-8'))
,我保证您会在标准输出中看到一些代码。
分配是一个同步操作,我们知道单线程Node.js确实对同步方面不太满意。不安全的分配比安全的要快得多,这是因为缓冲区匿名化步骤需要时间。安全分配是安全的,但是要在性能上进行权衡。
我建议您先坚持安全分配,如果最终性能低下,您可以考虑实现不安全分配的方法,而不必暴露私有内容。请记住,allocUnsafe
方法的单词unsafe
是有原因的。例如,如果您要通过PCI DSS等合规性认证,我很确定QSA会注意到这一点,并且会有很多问题。