C++ 为什么在Windows/unix/linux中使用管道被认为是危险的?

C++ 为什么在Windows/unix/linux中使用管道被认为是危险的?,c++,c,ipc,pipe,named-pipes,C++,C,Ipc,Pipe,Named Pipes,为什么使用管道被认为是危险的?如何避免这些安全问题 我最感兴趣的是Windows,但如果您有其他操作系统信息,请提供。(假设您从提到“c”和“IPC”开始谈论Unix命名管道。Windows命名管道的工作方式有所不同) 任何具有权限的人都可以写入命名管道,因此您必须小心使用权限和锁定(请参阅)。如果应用程序信任它从命名管道获得的输入(通常情况下,除非您显式地在其中构建输入验证),那么恶意用户可以在拥有权限的情况下将任何所需数据写入命名管道 此外,如果您没有以独占方式锁定管道,任何具有权限的用户都

为什么使用管道被认为是危险的?如何避免这些安全问题

我最感兴趣的是Windows,但如果您有其他操作系统信息,请提供。

(假设您从提到“c”和“IPC”开始谈论Unix命名管道。Windows命名管道的工作方式有所不同)

任何具有权限的人都可以写入命名管道,因此您必须小心使用权限和锁定(请参阅)。如果应用程序信任它从命名管道获得的输入(通常情况下,除非您显式地在其中构建输入验证),那么恶意用户可以在拥有权限的情况下将任何所需数据写入命名管道


此外,如果您没有以独占方式锁定管道,任何具有权限的用户都可以从管道中读取并截获从管道中传出的数据。然后,数据就会从读者期望的输入流中丢失。

但这不是归结为“有权限的人可以做坏事”,这在每个操作系统功能中都是如此吗?没错,但我认为最明显的失败案例是在同一用户下运行多个进程。它们都具有相同的权限和对管道的访问权限,因此您必须管理该访问权限以防止争用情况。e、 与此相反,TCP套接字是进程到进程的。主要原因(在某种程度上,这也适用于Windows命名管道)是管道位于公共命名空间中,而套接字在建立连接后是私有的(假设TCP流本身没有被劫持)。您的标题和问题内容与您想要的操作系统信息相矛盾,请酌情更正。