Warum CGi-Skripte keine Header von STDIN lesen

432
xaxa

Nach den jüngsten Schwachstellen im Zusammenhang mit CGI habe ich etwas darüber gelesen und habe eine Frage. Bitte beachten Sie, dass ich CGI nie selbst verwendet habe und dass ich nicht in PHP oder Perl programmiere, so dass da vielleicht etwas offensichtlich ist, das mir fehlt.

Wie ich verstehe, muss die Antwortnachricht durch das Skript zu STDOUT einschließlich geschrieben werden beide Kopf- und Körper. Warum lesen Sie dann nicht die gesamte Anforderungsnachricht einschließlich der Kopfzeilen und des Nachrichtentexts von STDIN? Warum werden Header entfernt und stattdessen Umgebungsvariablen zugewiesen?

0

1 Antwort auf die Frage

0
Adrien

Antwortnachrichten an Stdout enthalten nur zusätzliche Header, die die CGI hinzufügen möchte. Diese können vom Host-Webdienst ersetzt oder geändert werden, bevor sie an den Client gesendet werden. Im Allgemeinen werden auch andere Header hinzugefügt.

Bei den eingehenden Kopfzeilen macht es absolut keinen Sinn, die Last und das Risiko der Analyse dieser Daten auf die CGI zu übertragen. Fehler beim Analysieren erzeugen alle Arten von Schwachstellen. Der Webserver-Host ist das Beste, um dies zu tun.

Bei FastCGI ist es jedoch wieder anders, da Umgebungsvariablen keine Option mehr sind, da der CGI-Prozess resident bleibt.

Ich meine, dass die Analyse eingehender Nachrichten vom ultimativen Programm (in C, Perl oder was auch immer) geschrieben werden sollte. Wie ist das weniger sicher als das Setzen von Umgebungsvariablen? xaxa vor 8 Jahren 0
Der Grund ist, dass jeder andere CGI dazu einen eigenen Parser-Code benötigen würde. Aus der Sicht des Servers ist es besser, wenn das Parsing selbst durchgeführt wird. Dann bietet es sich nicht für die Nutzung schlecht geschriebener CGIs mit Parsing-Fehlern an. Adrien vor 8 Jahren 0
Übrigens, das Parsen eines POST-Body ist dem Programm selbst überlassen. Wenn es den Body sowieso parst, warum parsen Sie nicht die ganze Nachricht xaxa vor 8 Jahren 0
das ist wahr, aber es gibt auch das alte problem. Die CGI-Schnittstelle lässt den Header die Header analysieren. Sie müssten Kompatibilitätsprobleme verwalten, wenn Sie die CGI dazu veranlassen sollten, Anforderungsheader zu analysieren. Mein Punkt in Bezug auf ausgesendete Antwort-Header ist ebenfalls relevant. Ein Skript kann viele Dinge zerstören (Framing usw.), indem es schlechte Kopfzeilen ausgibt. Ein Server hat immer die Möglichkeit, ausgegebene Header zu überprüfen, und der Server muss dafür sorgen, dass die Antwort formuliert ist und alle erforderlichen Header enthält, die möglicherweise vom Skript weggelassen wurden. Adrien vor 8 Jahren 0