AutoProxy-Probleme in WinHTTP
Berücksichtigen Sie die folgenden wichtigen Probleme bei der Verwendung des WinHTTP-Autoproxyfeatures.
Derzeit wird nur ein Proxyserver unterstützt.
WinHTTP unterstützt derzeit keine Proxykonfigurationen, die mehrere Proxyserver angeben. Wenn WinHttpGetProxyForUrl eine WINHTTP_PROXY_INFO-Struktur zurückgibt, die eine Liste von Proxyservern enthält, die die Anwendung dann mit der Option WINHTTP_OPTION_PROXY für das Anforderungshandle festlegt, verwendet WinHTTP nur den ersten Proxyserver in der Liste. Wenn auf diesen Proxyserver nicht zugegriffen werden kann, führt WinHTTP kein Failover auf einen der anderen Proxyserver in der Liste aus. Es liegt an der Anwendung, diesen Fall zu behandeln, indem sie die Option WINHTTP_OPTION_PROXY mit dem nächsten Proxyserver in der Liste erneut festlegt und die Anforderung erneut sendet.
Sicherheitsrisikominderung
Für die Verarbeitung der Proxy-Autokonfigurationsdatei muss heruntergeladener Skriptcode ausgeführt werden. Einige Sicherheitsbedenken: Wenn der Server, auf dem sich die PAC-Datei befindet, kompromittiert wurde, ist es möglich, dass der PAC-Skriptcode böswillig ist. Daher verwendet WinHTTP die folgenden Vorsichtsmaßnahmen, um den Client zu schützen:
Der Skriptcode wird daran gehindert, ActiveX-Objekte zu instanziieren. Dies blockiert viele potenziell gefährliche Funktionen, z. B. die Möglichkeit, auf Dateien zuzugreifen und Netzwerk-E/A durchzuführen.
**Windows Server 2003: **WinHttpGetProxyForUrl delegiert die gesamte WPAD-Verarbeitung an einen externen Out-of-Process-Dienst, den WinHTTP WebProxy Auto-Discovery-Dienst, der unter dem integrierten Benutzerkonto des lokalen Diensts mit geringen Berechtigungen ausgeführt wird.
Windows XP mit SP2 und Windows Server 2003: Ein PAC-Skript darf nicht länger als 60 Sekunden ausgeführt werden, danach wird die Skriptausführung beendet.
Windows XP mit SP2 und Windows Server 2003: WinHTTP lehnt PAC-Dateien ab, die größer als 1 MB sind. Eine typische PAC-Datei ist in der Regel nicht mehr als einige Kilobyte groß.
Beachten Sie, dass für die Verarbeitung des PAC-Skriptcodes die Verwendung von COM erforderlich ist, da WinHTTP die Microsoft JScript-Komponente zum Ausführen des Skripts verwendet. Wenn WinHTTP die WPAD-Protokollverarbeitung nicht an einen externen, out-of-process Webproxy Auto-Discovery-Dienst delegieren kann, lädt WinHttpGetProxyForUrl die COM-Runtime innerhalb des Anwendungsprozesses für die Dauer des Aufrufs. Wenn die Anwendung selbst bereits COM verwendet, sollte dies kein Problem sein.
Überlegungen zur Leistung
Der Prozess der automatischen Erkennung kann langsam und möglicherweise mehrere Sekunden lang sein. Die Funktionen WinHttpGetProxyForUrl und WinHttpDetectAutoProxyConfigUrl sind blockierende synchrone Funktionen. Es kann sein, dass ein bestimmter Mechanismus zur automatischen Erkennung (z. B. DHCP) viel langsamer ist als der andere (z. B. DNS). Wenn sowohl die WINHTTP_AUTO_DETECT_TYPE_DHCP- als auch WINHTTP_AUTO_DETECT_TYPE_DNS_A-Autoerkennungsflags angegeben werden, verwendet WinHTTP gemäß der WPAD-Spezifikation zuerst DHCP. Wenn durch das Ausgeben einer DHCP-Anforderung keine PAC-URL ermittelt wird, versucht WinHTTP, die PAC-Datei unter einer bekannten DNS-Adresse zu suchen.
WinHttpGetProxyForUrl verwendet den WinHTTP-Sitzungshandle-Parameter zum Zwischenspeichern der PAC-Datei und der Ergebnisse der automatischen Erkennung. Es empfiehlt sich, nach Möglichkeit dasselbe Sitzungshandle für mehrere WinHttpGetProxyForUrl-Aufrufe zu verwenden, um wiederholte PAC-URL-Erkennung und Dateidownloads zu vermeiden. Die PAC-Datei wird nur im Arbeitsspeicher zwischengespeichert und verworfen, wenn die Anwendung das Sitzungshandle schließt.
Aufgrund der Auswirkungen von Autoproxy auf die Leistung wird empfohlen, dass nur Desktopclientanwendungen oder -dienste das Feature verwenden. serverbasierte Anwendungen sollten sich auf den Serveradministrator verlassen, der das Hilfsprogramm "ProxyCfg.exe" verwendet.