我的进程(服务器)通过 CreateProcess
创建一个子进程(客户端)我正在这些进程之间进行 IPC。我从匿名管道开始,但很快我发现它不支持重叠操作,如 here 所述。 .
所以,命名管道是我的第二选择。我的困惑是:如果我创建了一个命名管道,是否可以将此管道的访问权限限制为我之前调用 CreateProcess
创建的子进程? ?因此,即使另一个进程获得了管道的名称,它仍然无法读取或写入管道。
我的 IPC 使用仅限于本地机器和单一平台 (Windows)。
顺便说一句,我可以更改这些进程的两个代码。
最佳答案
您可以使用 lpSecurityAttributes
将 ACL 显式分配给新管道。范围。这将允许您确保,如果另一个用户登录,他们无法连接到管道。
但是,如果您在父进程中创建管道的两端,则渎职的范围很小,因此通常不需要显式设置 ACL。一旦你打开了管道的客户端,任何其他进程都不能连接到管道(如果你希望他们这样做,你必须创建第二个实例)所以只有一个非常短暂的时间间隔,在此期间另一个进程可以干扰;即使发生这种情况,您也无法连接客户端,因此您会知道出了点问题。
换句话说,攻击的范围仅限于拒绝服务,并且由于攻击进程需要在同一台机器上运行,因此只需占用 CPU 就可以实现更有效的拒绝服务。
注意:
FILE_FLAG_FIRST_PIPE_INSTANCE
创建管道时标记,以确保您知道是否存在名称冲突。 PIPE_REJECT_REMOTE_CLIENTS
出于显而易见的原因。 关于Windows 命名管道访问控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40844884/