Philipp Hasenfratz: fsockopen durch proxy tunneln

Beitrag lesen

Halihallo Johannes

Das steht in den User-Kommentaren. Such mal auf http://www.php.net/manual/en/function.fsockopen.php nach »Sherif Gayed«.

Oha. Erstens geht er von einem Proxy ohne Authentifizierung aus,
zweitens ist die Implementierung IMO fehlerhaft:

Aus RFC 2616:
<cite>
   1. If Request-URI is an absoluteURI, the host is part of the
     Request-URI. Any Host header field value in the request MUST be
     ignored.

2. If the Request-URI is not an absoluteURI, and the request includes
     a Host header field, the host is determined by the Host header
     field value.
</cite>

und

<cite>
A "transparent proxy" is a proxy that does not modify the request or
response beyond what is required for proxy authentication and
identification. A "non-transparent proxy" is a proxy that modifies
the request or response in order to provide some added service to
the user agent, such as group annotation services, media type
transformation, protocol reduction, or anonymity filtering.
</cite>

Der Proxy hat selber überhaupt nichts mit dem Host-Header zu tun. Er
leitet diesen nur weiter. Der Proxy erkennt seinerseits den Ziel-
Rechner wahlweise über die absolute URI (falls vorhanden), oder dem
Host-Header (welcher im Beispiel falsch ist, denn er MUSS dem Ziel-
Rechner entsprechen, falls keine absolute URI vorliegt).

Also: Der HTTP-Request als solcher ändert bei einem Proxy ohne
Authentifizierung überhaupt nicht (oder muss nicht). Der Client muss
einfach den Request nicht an den Ziel-Server, sondern an den Proxy
senden. Bei Proxies mit Authentifizierung kommt ein Proxy-
Authenticate-Header hinzu.

Das Fakt dass sein Beispiel funktioniert, basiert alleine auf der
Tatsache, dass der Server das Host-Headerfield ignorieren MUSS, wenn
eine Absolute URL im Request gesendet wird.

Viele Grüsse

Philipp