我希望在我的应用程序中使用命名管道。服务器将是 NT 服务,客户端是用户空间应用程序。我认为如果有人可以创建锁定管道(或其他东西)的应用程序客户端并且我的服务器停止接收消息,则可能会出现问题。
我想补充一点,客户端应该始终发送消息,服务器接收它们。如果有人扰乱了这个过程,就会有问题。
我需要建议如何保护命名管道
我希望在我的应用程序中使用命名管道。服务器将是 NT 服务,客户端是用户空间应用程序。我认为如果有人可以创建锁定管道(或其他东西)的应用程序客户端并且我的服务器停止接收消息,则可能会出现问题。
我想补充一点,客户端应该始终发送消息,服务器接收它们。如果有人扰乱了这个过程,就会有问题。
我需要建议如何保护命名管道
以下是在实现“安全”命名管道方面需要考虑的一些事项。
Windows 操作系统中的命名管道放置在\\.\pipe\
每个用户(包括来宾)都可以访问的特殊路径中。
一个命名管道可以有多个同名的实例;
第一个实例的创建者决定实例的最大数量并指定安全描述符。
如果命名管道不存在,任何用户都可以创建第一个实例并设置所有管道实例的 DACL。
如果存在,则只有具有FILE_CREATE_PIPE_INSTANCE
权限的用户才能创建新实例。
FILE_FLAG_FIRST_PIPE_INSTANCE
服务器的标志来确保它正在创建第一个实例。致谢:对不安全的进程间通信进行机器中人 (MitMa) 攻击,这解释了不保护包括命名管道在内的许多 IPC 方法的危害。
AFAIK,多个不同的客户端进程都可以打开命名管道并写入单个读取器进程。这在 Unix 上肯定是正确的,所以在 Windows 上也可能如此。
这意味着单个进程无法阻止其他进程写入服务器——尽管行为不端的进程可能会用它的消息压倒服务器。对于过于热情的客户,没有简单的保护措施。