Die syntaktischen Grundlagen des Protokolls sind im Standard selber geregelt. Generell fällt auf, dass das Protokoll wesentlich weniger fehlertolerant gegenüber Tippfehlern ist als andere Komponenten der Web-Architektur, wie z.B. HTML. der einfache Grund dafür liegt darin, dass HTTP an sich niemals von Hand eingegeben wird, sondern immer von Programmen generiert wird, die sich sehr einfach an rigorose Syntax-Vorschriften halten können.
Einige wichtige Beobachtungen im Zusammenhang mit HTTP sind:
Host
Header angeben, da dieser in HTTP/1.1 verpflichtend vorgeschrieben wird.
Host
Header zwar auch akzeptiert, er kann aber auch weggelassen werden (was Probleme verursacht mit name-based Virtual Hosts).
Beachtet man diese Regeln, kann man mit Hilfe des telnet Programmes (oder eines vergleichbaren Tools) auf sehr einfach Verbindungen zu HTTP-Servern herstellen und von diesen Informationen abfragen. Natürlich sind diese Informationen immer darauf beschränkt, was der jeweilige Server über HTTP herauszugeben bereit ist, und ein gut (im Sinne von "sicher") konfigurierter Server sollte keine kritischen Informationen herausgeben. Im folgenden eine Auflistung der in der Aufgabe angegebenen Server (die ausgegebenen Textteile sind jeweils hervorgehoben dargestellt):
www.ethz.ch
(ETH Zürich)
OPTIONS / HTTP/1.1
Host: www.ethz.ch
HTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
Date: Mon, 07 May 2001 14:34:24 GMT
Public: OPTIONS, TRACE, GET, HEAD, POST, PUT, DELETE
Allow: OPTIONS, TRACE, GET, HEAD
Content-Length: 0
Alles wie erwartet, nur der nicht standardgemässe Public
Header erstaunt, zumal die Logik sein sollte, dass Public
eine Untermenge der Allow
Methoden sind und nicht umgekehrt...
HEAD / HTTP/1.1
Host: www.ethz.ch
HTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
Date: Mon, 07 May 2001 14:34:42 GMT
Content-Type: text/html
Cache-control: private
Transfer-Encoding: chunked
www.ee.ethz.ch
(Elektrotechnik ETH Zürich)
OPTIONS / HTTP/1.1
Host: www.ee.ethz.ch
HTTP/1.1 200 OK
Date: Mon, 07 May 2001 15:51:13 GMT
Server: Apache/1.3.12 (Unix) ApacheJServ/1.1 PHP/3.0.15 mod_ssl/2.6.2 OpenSSL/0.9.5
Content-Length: 0
Allow: GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, PATCH, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK, TRACE
Auf diesem Server sind offensichtlich die WebDAV HTTP Extensions installiert, wie man an den Methoden im Allow
Header sehen kann. Zudem sind spezielle Module für Java Servlets, den PHP Hypertext Preprocessor und für sichere Verbindungen mit dem Secure Sockets Layer (SSL) als Module im Apache vorhanden. PHP ist eine Skriptsprache, mit welcher man Spezialanweisungen im HTML-Dokument einbetten kann.
HEAD / HTTP/1.1
Host: www.ee.ethz.ch
HTTP/1.1 200 OK
Date: Mon, 07 May 2001 15:51:48 GMT
Server: Apache/1.3.12 (Unix) ApacheJServ/1.1 PHP/3.0.15 mod_ssl/2.6.2 OpenSSL/0.9.5
Content-Location: index.en.html
Vary: negotiate,accept-language
TCN: choice
Last-Modified: Mon, 07 May 2001 15:50:42 GMT
Content-Type: text/html
Content-Language: en
www.tik.ee.ethz.ch
(Institut TIK ETH Zürich)
OPTIONS / HTTP/1.1
Host: www.tik.ee.ethz.ch
HTTP/1.1 200 OK
Date: Mon, 07 May 2001 15:52:49 GMT
Server: Apache/1.3.1 Ben-SSL/1.23 (Unix)
Content-Length: 0
Allow: GET, HEAD, OPTIONS, TRACE
Auf diesem Server ist ein Modul für die Verwendung des Secure Sockets Layer (SSL) installiert. Dies kann man in der Praxis ausprobieren, indem man den Server von einem Browser mit URIs mit einem https:
Präfix anstatt http:
anspricht.
HEAD / HTTP/1.1
Host: www.tik.ee.ethz.ch
HTTP/1.1 200 OK
Date: Mon, 07 May 2001 15:54:22 GMT
Server: Apache/1.3.1 Ben-SSL/1.23 (Unix)
Content-Type: text/html
dret.net
(Erik Wilde)
OPTIONS / HTTP/1.1
Host: dret.net
HTTP/1.1 200 OK
Date: Mon, 07 May 2001 15:57:36 GMT
Server: Apache/1.3.19 (Unix) PHP/4.0.4pl1
Content-Length: 0
Allow: GET, HEAD, OPTIONS, TRACE
Dieser Server unterstützt auch PHP Hypertext Preprocessor
HEAD / HTTP/1.1
Host: dret.net
HTTP/1.1 200 OK
Date: Mon, 07 May 2001 15:59:13 GMT
Server: Apache/1.3.19 (Unix) PHP/4.0.4pl1
Content-Type: text/html
Betrachtet man all diese Server-Responses, so sieht man, dass die Implementierungen von HTTP recht unterschiedlich sind, und offenbar auch noch sehr von der Konfiguration des Servers abhängen, drei der vier betrachteten Server sind ja Apache-Server.
Für einen kommerziell betriebenen Server wäre es weniger empfehlenswert, so mitteilsam hinsichtlich seiner Konfiguration zu sein wie es Apache meistens ist. Dies bietet nur Angriffspunkte für Hacker und hat keinerlei positive Auswirkungen auf die Protokollverwendung. Am wenigsten empfehlenswert in dieser Hinsicht ist natürlich die Art, wie der Server dret.net
Auskunft über seine Konfiguration gibt, dies bietet einen exzellenten Angriffspunkt für Hacker. Wobei in diesem Fall noch gesagt werden muss, dass die Hacker auch erst einmal die beiden URIs wissen müssen, unter der man diese Informationen abfragen kann, und das ist eher unwahrscheinlich...
Die für die Erstellung der Tabelle notwendigen Daten wurden gewonnen, indem jeweils das nc
Programm im Listen-Mode gestartet wurde auf einem für alle Benutzer zugänglichen Port, und dann mit einem Browser ein Request auf diesen Port geschickt wurde, indem der Rechnername und die Portnummer direkt im Adressfeld des Browsers eingegeben wurden. Die folgende Tabelle kommentiert nicht alle Header-Felder, sondern nur die wichtigsten. Interessant daran ist, dass selbst neue Browser wie Netscape 6.0 immer noch HTTP/1.0 verwenden.
Eine komplette Aufstellung aller Header-Felder findet sich im HTTP Standard oder, in besser lesbarer Form, im Buch zur Vorlesung.
HTTP Header Field | erwartete Werte | untersuchte Browser | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
PC/Windows | Sun/Solaris | |||||||||||
IE 5.5 / Win2000 | Navigator 4.73 / WinNT40 | Navigator 6.0 / Win95 | Opera 3.60 / Win95 | Amaya 2.4 / Win95 | Amaya 3.1 / Win95 | Navigator 3.04 | Navigator 4.7 | IE 5.0 | Lynx 2.8.2 | XMosaic 2.6 | ||
generierter Request: | file | file | file | file | file | file | file | file | file | file | file | |
HTTP Version: | HTTP/1.1 | HTTP/1.0 | HTTP/1.0 | HTTP/1.0 | HTTP/1.1 | HTTP/1.1 | HTTP/1.0 | HTTP/1.0 | HTTP/1.1 | HTTP/1.0 | HTTP/1.0 | |
Accept
| sollte angeben, welche Medientypen vom Browser unterstützt werden, also sicher HTML und Bildcodierungen und vielleicht noch anderes (je nach Plug-Ins) | gut, aber das */* am Ende ist suboptimal | nicht schlecht, aber das */* am Ende ist suboptimal | extrem schlecht (*/* und sonst nichts) | nicht schlecht, aber das */* am Ende ist suboptimal | extrem schlecht (*/* und sonst nichts) | extrem schlecht (*/* und sonst nichts) | nicht schlecht, aber das */* am Ende ist suboptimal | nicht schlecht, aber das */* am Ende ist suboptimal | nicht schlecht, aber das */* am Ende ist suboptimal | perfekt, so sollte es bei allen sein! | extrem schlecht (*/* und sonst nichts) |
Accept-Language
| gibt die Sprachpräferenz des Benutzers an, falls der Browser so eine Möglichkeit vorsieht | nur eine Sprache angegeben | nur eine Sprache angegeben | nicht schlecht, aber die q-Faktoren fehlen | n/a | n/a | n/a | n/a | nur eine Sprache angegeben | nur eine Sprache angegeben | nur eine Sprache angegeben | n/a |
Connection
| Gibt "Connection Tokens" an, die für die Verbindung zwischen Cloient und Server gelten | ok | notwendig für persistent connections, weil HTTP/1.0 benutzt wird | schlecht, HTTP/1.0 und somit keine persistent connections | schlecht, HTTP/1.0 und somit keine persistent connections | ok | ok | notwendig für persistent connections, weil HTTP/1.0 benutzt wird | notwendig für persistent connections, weil HTTP/1.0 benutzt wird | ok | schlecht, HTTP/1.0 und somit keine persistent connections | schlecht, HTTP/1.0 und somit keine persistent connections |
User-Agent
| identifiziert den User Agent (also den Browser) gegenüber dem Server | nennt sich aus Kompatibilitätsgründen "Mozilla/4.0" | wie erwartet | Mozilla/5.0 und Netscape/6.0, etwas verwirrend aber technisch ok | nennt sich aus Kompatibilitätsgründen "Mozilla/4.0" | wie erwartet | wie erwartet | wie erwartet | wie erwartet | nennt sich aus Kompatibilitätsgründen "Mozilla/4.0" | wie erwartet | wie erwartet |
please send comments to www-vl@dret.net last modification on Tuesday, 15-May-2001 11:34:38 CEST |
![]() ![]() |