C6248
警告 C6248:将 SECURITY_DESCRIPTOR 的 DACL 设置为 NULL 将产生一个不受保护的对象
此警告识别出一个将 SECURITY_DESCRIPTOR 的 DACL 字段设置为 null 的调用。 如果将属于对象安全说明符的 DACL 设置为 NULL,则会创建一个 null DACL。 null DACL 对请求它的任何用户都授予完全访问权限;将不针对该对象执行正常的安全检查。 不应当将 null DACL 与空 DACL 混淆。 空 DACL 是正确分配和初始化的 DACL,它不包含 ACE。 空 DACL 对于它被分配到的对象不授予访问权限。
具有 null DACL 的对象的安全说明符可能被恶意用户更改,从而使得任何人都无法访问该对象。
即使每个人都需要访问某个对象,也应当对该对象进行保护,以便只有管理员才能改变其安全性。 如果只有创建者需要访问某个对象,则不应当在该对象上设置 DACL;系统将选择一个适当的默认值。
示例
在下面的代码中,因为向 SetSecurityDescriptorDacl 函数传递了一个 null DACL,所以会生成此警告:
#include <windows.h>
void f( PSECURITY_DESCRIPTOR pSecurityDescriptor )
{
if (SetSecurityDescriptorDacl(pSecurityDescriptor,
TRUE, // Dacl Present
NULL, // NULL pointer to DACL
FALSE)) // Defaulted
{
// Dacl is now applied to an object
}
}
若要查看有关如何创建安全说明符的完整示例,请参见 Creating a Security Descriptor for a New Object in C++(使用 C++ 为新对象创建安全说明符)。 有关更多信息,请参见 Creating a DACL(创建 DACL)。