2008-10-10 4 views

Antwort

16

(vorausgesetzt, Sie sprechen über Unix Named Pipes aus der Erwähnung von 'c' und 'IPC'. Windows-Named Pipes funktioniert etwas anders)

Jeder mit Berechtigungen zu einem Named Pipe schreiben, so dass Sie vorsichtig mit Berechtigungen und Sperren sein (siehe flock()). Wenn eine Anwendung der Eingabe vertraut, die sie von der Named Pipe erhält (was normalerweise der Fall sein wird, wenn Sie die Eingabeüberprüfung nicht explizit erstellen), kann ein böswilliger Benutzer beliebige Daten in die Named Pipe schreiben, sofern sie über entsprechende Berechtigungen verfügen.

Jeder Benutzer mit Berechtigungen kann auch aus der Pipe lesen und Daten abfangen, wenn er nicht exklusiv gesperrt wurde. Die Daten fehlen dann im Eingabestream, den der Leser erwartet.

+9

Aber läuft das nicht einfach darauf hinaus, dass "Leute mit Erlaubnis schlechte Dinge tun können", was bei jeder OS-Funktion zutrifft? –

+1

Das stimmt, aber ich denke, der offensichtlichste Fehlerfall ist, dass mehrere Prozesse unter demselben Benutzer ausgeführt werden. Sie haben alle die gleichen Berechtigungen und Zugriff auf die Pipe, also müssen Sie diesen Zugriff verwalten, um Rennbedingungen zu verhindern. z.B. TCP-Sockets hingegen sind Process-to-Process. –

+2

Der Hauptgrund (und dieser Apple zu Windows Named Pipes in gewissem Umfang) ist, dass die Pipes in einem öffentlichen Namespace leben, während Sockets privat sind, sobald eine Verbindung hergestellt wird (vorausgesetzt, der TCP-Stream selbst wird nicht entführt). – ConcernedOfTunbridgeWells

Verwandte Themen