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)。