Win での AutoProxy の問題HTTP

WinHTTP autoproxy 機能を使用する場合は、次の重要な問題を考慮してください。

現在サポートされているプロキシ サーバーは 1 つだけです

現在、WinHTTP では、複数のプロキシ サーバーを指定するプロキシ構成はサポートされていません。 WinHttpGetProxyForUrl がプロキシ サーバーの一覧を含むWINHTTP_PROXY_INFO構造体を返す場合、アプリケーションは WINHTTP_OPTION_PROXY オプションを使用して要求ハンドルに設定します。WinHTTP では、リスト内の最初のプロキシ サーバーのみが使用されます。 そのプロキシ サーバーにアクセスできない場合、WinHTTP はリスト内の他のプロキシ サーバーにフェールオーバーしません。 WINHTTP_OPTION_PROXY オプションを リスト内の次のプロキシ サーバーで再度設定し、要求を再送信することで、このケースを処理するのはアプリケーション次第です。

セキュリティ リスク軽減策

プロキシ自動構成ファイルを処理するには、ダウンロードしたスクリプト コードを実行する必要があります。 考慮すべきいくつかのセキュリティ上の懸念事項: PAC ファイルが存在するサーバーが侵害されている場合は、PAC スクリプト コードが悪意のある可能性があります。 したがって、WinHTTP では、次の予防措置を使用してクライアントを保護します。

  1. スクリプト コードでは、ActiveX オブジェクトをインスタンス化できなくなります。 これにより、ファイルへのアクセスやネットワーク I/O の実行など、危険な可能性のある多くの機能がブロックされます。

  2. **Windows Server 2003: **WinHttpGetProxyForUrl は、WPAD 処理全体を外部のアウトプロセス サービスである WinHTTP Web プロキシ自動検出サービスに委任します。これは、低い特権を持つローカル サービスの組み込みユーザー アカウントで実行されます。

  3. SP2 および Windows Server 2003 の Windows XP: PAC スクリプトは、60 秒を超えて実行することはできません。その後、スクリプトの実行が終了します。

  4. SP2 および Windows Server 2003 の Windows XP: WinHTTP では、1 MB を超える PAC ファイルが拒否されます。 一般的な PAC ファイルのサイズは、通常、数キロバイト以下です。

WINHTTP では Microsoft JScript コンポーネントを使用してスクリプトを実行するため、PAC スクリプト コードを処理するには COM を使用する必要があることに注意してください。 WinHTTP が WPAD プロトコル処理を外部のアウトプロセス Web プロキシ自動検出サービスに委任できない場合、 WinHttpGetProxyForUrl は 、呼び出しの期間中、アプリケーション プロセス内で COM ランタイムを読み込みます。 アプリケーション自体が既に COM を使用している場合、これは問題になりません。

パフォーマンスに関する考慮事項

自動検出プロセスは、数秒の間、遅くなる可能性があります。 WinHttpGetProxyForUrl 関数と WinHttpDetectAutoProxyConfigUrl 関数は、同期関数をブロックしています。 1 つの特定の自動検出メカニズム (DHCP など) が、もう一方 (DNS など) よりもはるかに低速である可能性があります。 WINHTTP_AUTO_DETECT_TYPE_DHCPWINHTTP_AUTO_DETECT_TYPE_DNS_A両方の自動検出フラグが指定されている場合、WinHTTP は WPAD 仕様に従って最初に DHCP を使用します。 DHCP 要求を発行して PAC URL が検出されない場合、WinHTTP は既知の DNS アドレスで PAC ファイルの検索を試みます。

WinHttpGetProxyForUrl は、PAC ファイルと自動検出の結果をキャッシュするために WinHTTP セッション ハンドル パラメーターを使用します。 可能であれば、複数の WinHttpGetProxyForUrl 呼び出しに同じセッション ハンドルを使用して、PAC URL の検出とファイルのダウンロードを繰り返さないようにすることをお勧めします。 PAC ファイルはメモリ内でのみキャッシュされ、アプリケーションがセッション ハンドルを閉じると破棄されます。

autoproxy のパフォーマンスに影響するため、この機能はデスクトップ クライアント アプリケーションまたはサービスのみが使用することをお勧めします。サーバー ベースのアプリケーションは、"ProxyCfg.exe" ユーティリティを使用してサーバー管理者に依存する必要があります。