Die Kommunikation über 127.0.0.1 kann als ein weiterer IPC-Mechanismus betrachtet werden, der jedoch vorhandene Protokolle wiederverwendet. Genau wie Shared Memory oder UNIX-Domänen-Sockets oder -Pipes ist dies eine von unzähligen Möglichkeiten, wie zwei Prozesse auf einem einzigen System kommunizieren können. Wenn Sie darauf vertrauen, dass die Prozesse auf Ihrem System nicht kompromittiert wurden, können Sie Verbindungen, die über 127.0.0.1 gehen, "blind" vertrauen.
Wenn Sie wissen, dass die IP-Adresse am anderen Ende eines TCP-Sockets 127.0.0.1 lautet, garantiert dies, dass entweder der Systemadministrator die Firewall so konfiguriert hat, dass diese bestimmte Verbindung umgeleitet wird, oder dass am anderen Ende des TCP-Sockets ein Prozess ausgeführt wird dieselbe Maschine. Wenn Sie also Ihrem Servercomputer als Ganzes vertrauen, können Sie 127.0.0.1 vertrauen. Es gibt jedoch Vorteile, keinen TCP-Socket zu verwenden, um sich umfassend zu verteidigen.
Sie müssen vorsichtig sein, wie Sie den localhost-Check implementieren. Localhost ist 127.0.0.1 bis zu dem Tag, an dem dies nicht mehr der Fall ist, beispielsweise weil Sie zu einer Version einer Bibliothek wechseln, die standardmäßig IPv6 verwendet, oder weil Sie sich entscheiden, dem Mix eine Form von Weiterleitungsproxy hinzuzufügen, damit Sie die ausführen können zwei Dienste auf verschiedenen Maschinen oder Containern. Wenn Sie beginnen, einen Proxy zu verwenden, achten Sie darauf, an der richtigen Stelle nachzusehen. Und natürlich müssen Sie sicherstellen, dass Sie niemals etwas anderes, das fragwürdig sein könnte, auf derselben Maschine hosten (aber warum sollten Sie das in jenen Tagen von VMs und Containern tun).
Zu wissen, dass Sie mit derselben Maschine sprechen, sagt Ihnen nur, dass einige Prozess auf derselben Maschine befindet sich am anderen Ende der Verbindung. Es sagt Ihnen nicht, dass es der richtige Prozess ist. Im Normalbetrieb laufen vermutlich beide Prozesse. Wenn jedoch etwas schief geht, beispielsweise wenn ein Prozess aufgrund eines Denial-of-Service-Angriffs abstürzt, nachdem ihm der Speicher ausgegangen ist, wäre der Port für einen anderen Prozess zum Abhören frei. Jeder lokale Prozess kann sich jederzeit mit einem laufenden Server verbinden. Dies erfordert, dass der Angreifer in der Lage ist, einen Prozess lokal auszuführen, aber es könnte sich um einen unprivilegierten Prozess handeln, der sonst nicht viel tun könnte. Das Verlassen auf 127.0.0.1 ist zwar keine Schwachstelle, lässt Sie aber für eine Rechteausweitung offen.
Wenn Sie können, verwenden Sie stattdessen einen Unix-Socket. Unix- und TCP-Sockets funktionieren gleich, außer dass sie die Adresse angeben, zu der eine Verbindung hergestellt oder auf die gelauscht werden soll, sodass keine großen Codeänderungen erforderlich wären. Ein Unix-Socket kann Berechtigungen haben oder vom übergeordneten Supervisor erstellt werden, und nichts anderes kann sich damit verbinden. Mit einem Unix-Socket haben Sie die Garantie, dass nicht nur das, was sich am anderen Ende des Sockets befindet, auf derselben Maschine läuft, sondern dass es sich um den erwarteten Prozess handelt. Dadurch sind Sie nur anfällig für eine Sicherheitsverletzung im Authentifizierungsdienst oder im Hauptdienst und nicht für eine Sicherheitsverletzung in irgendetwas, das auf demselben Computer ausgeführt wird.