Proxy mit Authentifizierung, aber Script passiert ungehindert
Horst Nogajski
- webserver
Hallo zusammen,
ich habe ein kleines Verständnisproblem mit folgender Tatsache:
Ich habe lokal einen Proxyserver installiert und den mal so eingestellt das man ohne user-pass Anmeldung keine Verbindung nach draussen bekommt. (Das gilt für alle Protokolle wie HTTP, FTP, socks5, Mail)
Auf einem lokalen Apachen habe ich ein php-Script gestartet das mit fsockopen und HTTP-Headers eine Verbindung zu einem Dokument im WWW herstellt und anschliesend die Antworten ausgibt. (Für alle dies interessiert hänge ich das Script mal hinten ans Posting)
Wenn ich die gleiche Adresse im Browser eingebe werde ich erst nach user und pass gefragt.
Wieso kann das php-Script einfach eine Verbindung mit dem Server herstellen?
ziemlich ratlos,
Horst
______ Attachment ;) __________________
Script:
#========================================#
#========================================#
function phpLinkCheck($url, $r = FALSE)
{
/* Purpose: Check HTTP Links
* Usage: $var = phpLinkCheck(absoluteURI)
* $var["Status-Code"] will return the HTTP status code
* (e.g. 200 or 404). In case of a 3xx code (redirection)
* $var["Location-Status-Code"] will contain the status
* code of the new loaction.
* See print_r($var) for the complete result
*
* Author: Johannes Froemter j-f@gmx.net
* Date: 2001-04-14
* Version: 0.1 (currently requires PHP4)
*/
$url = trim($url);
if (!preg_match("=://=", $url)) $url = "http://$url";
$url = parse_url($url);
if (strtolower($url["scheme"]) != "http") return FALSE;
if (!isset($url["port"])) $url["port"] = 80;
if (!isset($url["path"])) $url["path"] = "/";
$fp = fsockopen($url["host"], $url["port"], &$errno, &$errstr, 30);
if (!$fp) return FALSE;
else
{
$head = "";
$httpRequest = "HEAD ". $url["path"] ." HTTP/1.1\r\n"
."Host: ". $url["host"] ."\r\n"
."Connection: close\r\n\r\n";
fputs($fp, $httpRequest);
while(!feof($fp)) $head .= fgets($fp, 1024);
fclose($fp);
preg_match("=^(HTTP/\d+.\d+) (\d{3}) ([^\r\n]*)=", $head, $matches);
$http["Status-Line"] = $matches[0];
$http["HTTP-Version"] = $matches[1];
$http["Status-Code"] = $matches[2];
$http["Reason-Phrase"] = $matches[3];
if ($r) return $http["Status-Code"];
$rclass = array("Informational", "Success",
"Redirection", "Client Error",
"Server Error");
$http["Response-Class"] = $rclass[$http["Status-Code"][0] - 1];
preg_match_all("=^(.+): ([^\r\n]*)=m", $head, $matches, PREG_SET_ORDER);
foreach($matches as $line) $http[$line[1]] = $line[2];
if ($http["Status-Code"][0] == 3)
$http["Location-Status-Code"] = phpLinkCheck($http["Location"], TRUE);
return $http;
}
}
Ausgabe:
(URL) http://www.nogajski.de/
(StatusCode) 200
Array
(
[Status-Line] => HTTP/1.1 200 OK
[HTTP-Version] => HTTP/1.1
[Status-Code] => 200
[Reason-Phrase] => OK
[Response-Class] => Success
[Date] => Thu, 18 Jul 2002 20:31:42 GMT
[Server] => Apache/1.3.20 (Linux/SuSE) mod_ssl/2.8.4 PHP/4.0.6
[Last-Modified] => Wed, 03 Jul 2002 12:31:10 GMT
[Accept-Ranges] => bytes
[Content-Length] => 883
[Connection] => close
[Content-Type] => text/html
)
Hallo,
[... Proxy ...]
Auf einem lokalen Apachen habe ich ein php-Script
gestartet das mit fsockopen und HTTP-Headers eine
Verbindung zu einem Dokument im WWW herstellt und
anschliesend die Antworten ausgibt.
Du meinst, zu einem Server im Internet :)
Wieso kann das php-Script einfach eine Verbindung mit dem
Server herstellen?
Benutzt dein Script denn auch die Proxy-Server? Oder
connectierst du dich direkt mit dem Server?
Gruesse,
CK