From: Raphael H. Becker (Raphael.Becker_at_gmx.de)
Date: 21. Jun 2002
Markus Hochholdinger wrote:
> > habe mir mal angeschaut, was ein Apache macht, wenn man ihn mit CONNECT
> > als Proxy anspricht und bin etwas verwundert darueber, wieso er als
> > Server-Signatur einen eigentlich beliebigen Hostnamen "vorgaukelt":
> Ja was soll der Server antworten?
> Wenn Du mehrere VirtualHosts hast, dann greifen diese nur, wenn der Name dazu
> paßt. Wenn der Name nicht paßt, wird der erste VirtualHost mit der
> angesprochenen IP genommen.
Das ist schon klar. Der Server schreibt allerdings (bei einer
404-Fehlerseite zB) unten in <ADRESS></ADRESS>-Tags den Namen rein, den
er eigentlich per CONNECT versuchen sollte zu erreichen. Er tut bei der
Fehlermeldung aber so, als waere er selbst der per CONNECT angesprochene
Server, selbst wenn es diesen nicht gibt. CONNECT ist ja auch kein
Seitenabruf (wo auch VirtualHost eine Rollen spielen koennte), sondern
eine PROXY-Verbindungs-Anforderung fuer zB SSL.
> Da der Apache nicht unbedingt wissen kann, wie er jetzt angesprochen wurde
> (IP, verschiedene Namen) ist es doch OK, daß er den angesprochenen Namen
> benutzt.
Er sollte zu mindest wissen, ueber welche IP er angesprochen wurde. Im
Falle von CONNECT ist das auch ohnehin egal, weil es da ja keinen
Virtual Host (siehe 2. Beispiel) gibt. Ausserdem gibt es einen
"Standard-Namen", den ich in der conf angebe ("ServerName")
> > Wieso meldet sich "mein" Apache (sollte sich, da er ueber localhost
> > angesprochen wurde auch als solcher angesprochen fuehlen) mit einem
> > X-beliebigen hostnamen, den ich im CONNECT mitgegeben habe?
> Wenn er sich anders meldet, könnte man so unter umständen herausbekommen,
> welche Webserver den alles unter dieser Apache Instanz laufen.
> Das könnte Sicherheitstechnisch problematisch werden denk ich.
s.o., ich haette erwartet, dass er sich unter dem Namen zu erennen gibt,
den er per "ServerName" bekommen hat, erst recht im Falle von HTTP/1.0.
> > Meinem Geschmack nach sollte Apache doch "wissen", dass er keinen
> > VirtualHost "does.not.exist" hat und demnach auch nicht als solcher
> > auftreten kann/darf/sollte, auch wenn ein Client ihm das weismachen
> > will. Der Standard-ServerName ist "www.localnet".
> Naja, es könnte ja sein, daß es diesen gibt. Also muß der Apache die
> Verbindung (TCP/IP) annehmen, um zu erfahren, was er liefern soll. Wenn er
> dann bemerkt, daß er diesen Host nicht hat, muß er ja trotzdem etwas liefern.
> Er kann ja die Verbindung nicht einfach so in der Luft hängen lassen.
Bei "GET" koennte ich das noch hinnehmen, bei "CONNECT" tritt mein
Apache dann auf, als waere er ein ganz anderer Server. Zur Erinnerung:
CONNECT baut eine Proxy-Verbindung auf, also eine 1:1 Weiterleitung
einer bestimmten TCP-Verbindung.
> Wie sollte der Apache Deiner Meinung nach reagieren?
Er soll sich (bei CONNECT) unter seinem eigenen Namen melden und nicht
(wie gezeigt) unter einem Phantasie-Hostnamen, den ich ihm CLientseitig
mitgegeben habe.
Er soll bei GET HTTP/1.1 (also mit Host:-Header im Client-Request)
unter seinem Standard-Namen melden und nicht unter einem
Phantasie-Namen, den er per Host: bekommen hat.
Letztlich kann dieser Fall in der Praxis so nicht ohne weiteres
auftreten, denn ein Client wird nicht so schnell "does.not.exist.tld" in
die IP von (meinetwegen) "does.exist.tld" aufloesen, dann auf IP-Ebene
mit "does.exist.tld" sprechen und auf http/1.1-Ebene ihm dann per
"Host:" "does.not.exist.tld" sagen.
Aus meinen Gefuehl heraus verhaelt er sich in beiden Faellen "falsch"
und ich kann auch nicht direkt nachvollziehen, wozu es gut sein sollte,
dass sich der Server (nicht im Header sondern im Body der Fehlermeldung)
mit falschem Namen meldet.
Mfg
Raphael Becker
--
"Es gibt sechs Milliarden Menschen auf der Welt - und 14 Milliarden
Mikroprozessoren. Wir sind schon in der Minderheit."
(Peter Cochrane, Forschungschef der British Telecom)
Dieses Archiv wurde generiert von hypermail 2.1.2 : 21. Jun 2002 CEST