我是否需要手动将 PCREDENTIAL 归零.凭据blob
Do I need to manually zero out PCREDENTIAL.CredentialBlob?
我正在使用Windows凭据存储,如下所示:
PCREDENTIAL cred = nullptr;
if (CredRead(entryName, 1, 0, &cred) != TRUE || !cred)
return -1;
// ... code which handles cred.UserName and cred.CredentialBlob
CredFree(cred);
如您所见,我根据需要释放缓冲区。但是,我看到LPBYTE指针CredentialBlob
仍然有效,并且仍然包含内存中的密码。我是否必须手动SecureZeroMemory
它以及谁拥有缓冲区?我没有发现其他源代码可以做到这一点...
我没有找到任何东西,https://msdn.microsoft.com/library/aa919793.aspx 只包含以下通用语句:
使用后从内存中清除凭据数据
使用后不要将凭据保留在内存中。使用后,通过调用 SecureZeroMemory 清除临时存储中的所有凭据数据。
您拥有缓冲区。 文档指出:
缓冲区中包含的任何指针都是指向此单个分配块中位置的指针。
在理想的世界中,CredFree
在释放块之前将整个块归零,并且可能值得提交一个建议来Microsoft这种效果,但就目前情况而言,您最好的选择可能是在调用CredFree
之前执行以下操作:
SecureZeroMemory (cred->CredentialBlob, cred->CredentialBlobSize);
但是,我看到 LPBYTE 指针 CredentialBlob 仍然有效
你如何确定这一点?最有可能的是,您是通过读取死内存来提交UB。
A 仍然包含内存中的密码
这更令人担忧,但你引用的文本告诉你该怎么做。
相关文章:
- 有没有一种快速的方法可以将类的所有静态成员归零?
- 我可以说服自动生成的构造函数将我的 POD 类成员归零吗?
- 当函数耗尽时结构被归零?
- 将结构的所有元素归零的最佳方法
- std::map<whatever,double>会自动将值归零吗?
- 我是否需要手动将 PCREDENTIAL 归零.凭据blob
- 在C++中对二维数组进行归零.循环需要2个吗
- 是否应始终在析构函数中清除/归零成员数据
- 当我的编译器不符合标准时,如何将数组成员归零
- 我怎样才能只将类的填充字节归零
- 如何在 O(1) 中将数组归零
- 如何将新数组归零
- 如何使用opencv库将3D矩阵的元素归零
- 将mmap偏移量的最后12位归零
- 指向"raw"资源的指针是否应该在析构函数中归零?
- 将现有数组归零的最快方法是什么?
- 将多维数组的一部分归零
- 为什么将结构归零会导致对虚基类成员的访问丢失?
- 这是将数组归零最快的方法
- 使用memset对派生结构体进行归零