【发布时间】:2011-04-23 11:15:34
【问题描述】:
我希望在我的应用程序中使用命名管道。服务器将是 NT 服务,客户端是用户空间应用程序。 我认为如果有人可以创建锁定管道(或其他东西)的应用程序客户端并且我的服务器停止接收消息,则可能会出现问题。
我想补充一点,客户端应该总是发送消息而服务器接收它们。如果有人打扰了这个过程,那就有问题了。
我需要有关如何保护命名管道的建议
【问题讨论】:
标签: c++ ipc named-pipes boost-interprocess
我希望在我的应用程序中使用命名管道。服务器将是 NT 服务,客户端是用户空间应用程序。 我认为如果有人可以创建锁定管道(或其他东西)的应用程序客户端并且我的服务器停止接收消息,则可能会出现问题。
我想补充一点,客户端应该总是发送消息而服务器接收它们。如果有人打扰了这个过程,那就有问题了。
我需要有关如何保护命名管道的建议
【问题讨论】:
标签: c++ ipc named-pipes boost-interprocess
以下是在实施“安全”命名管道方面需要考虑的一些事项。
Windows 操作系统中的命名管道被放置在一个特殊的路径\\.\pipe\ 中,每个用户(包括来宾)都可以访问该路径。
一个命名管道可以有多个同名的实例;
第一个实例的创建者决定实例的最大数量并指定安全描述符。
如果命名管道不存在,任何用户都可以创建第一个实例并设置所有管道实例的 DACL。
如果存在,则只有拥有FILE_CREATE_PIPE_INSTANCE 权限的用户才能创建新实例。
FILE_FLAG_FIRST_PIPE_INSTANCE 标志来确保它正在创建第一个实例。致谢:Man-in-the-Machine (MitMa) attacks on ill-secured inter process communications,它解释了不保护包括命名管道在内的许多 IPC 方法的危害。
【讨论】:
AFAIK,多个不同的客户端进程都可以打开命名管道并写入单个读取器进程。这在 Unix 上肯定是正确的,所以在 Windows 上也可能如此。
这意味着单个进程不能阻止其他进程写入服务器 - 尽管行为不端的进程可能会用它的消息压倒服务器。对于过于热情的客户,没有简单的保护措施。
【讨论】: