Bagikan melalui


Masalah AutoProxy di WinHTTP

Pertimbangkan masalah penting berikut saat menggunakan fitur autoproksi WinHTTP.

Hanya Satu Server Proksi yang Saat Ini Didukung

WinHTTP saat ini tidak mendukung konfigurasi proksi yang menentukan lebih dari satu server proksi. Jika WinHttpGetProxyForUrl mengembalikan struktur WINHTTP_PROXY_INFO yang berisi daftar server proksi, yang kemudian diatur aplikasi pada handel permintaan menggunakan opsi WINHTTP_OPTION_PROXY , WinHTTP hanya menggunakan server proksi pertama dalam daftar. Jika server proksi tersebut tidak dapat diakses, WinHTTP tidak melakukan failover ke server proksi lain dalam daftar. Terserah aplikasi untuk menangani kasus ini dengan mengatur opsi WINHTTP_OPTION_PROXY lagi dengan server proksi berikutnya dalam daftar, dan mengirim ulang permintaan.

Mitigasi Risiko Keamanan

Memproses file konfigurasi otomatis proksi memerlukan eksekusi kode skrip yang diunduh. Beberapa masalah keamanan yang perlu dipertimbangkan: Jika server tempat file PAC berada telah disusupi, ada kemungkinan kode skrip PAC berbahaya. Oleh karena itu, WinHTTP menggunakan tindakan pencegahan berikut untuk melindungi klien:

  1. Kode skrip dicegah untuk membuat instans objek ActiveX apa pun. Ini memblokir banyak fungsionalitas yang berpotensi berbahaya, seperti kemampuan untuk mengakses file dan untuk melakukan I/O jaringan.

  2. **Windows Server 2003: **WinHttpGetProxyForUrl mendelegasikan seluruh pemrosesan WPAD ke layanan luar proses eksternal, layanan WinHTTP Web Proxy Auto-Discovery, yang berjalan di bawah akun pengguna bawaan Layanan Lokal dengan hak istimewa rendah.

  3. Windows XP dengan SP2 dan Windows Server 2003: Skrip PAC tidak diizinkan untuk dijalankan selama lebih dari 60 detik, setelah itu eksekusi skrip dihentikan.

  4. Windows XP dengan SP2 dan Windows Server 2003: WinHTTP menolak file PAC yang lebih besar dari 1MB. File PAC umum biasanya berukuran tidak lebih dari beberapa kilobyte.

Ketahuilah bahwa memproses kode skrip PAC memerlukan penggunaan COM, karena WinHTTP menggunakan komponen Microsoft JScript untuk menjalankan skrip. Jika WinHTTP tidak dapat mendelegasikan pemrosesan protokol WPAD ke layanan Penemuan Otomatis Proksi Web eksternal yang tidak diproses, WinHttpGetProxyForUrl memuat runtime COM dalam proses aplikasi selama panggilan. Jika aplikasi itu sendiri sudah menggunakan COM, ini seharusnya tidak menjadi perhatian.

Pertimbangan Performa

Proses deteksi otomatis bisa lambat, mungkin selama beberapa detik. Fungsi WinHttpGetProxyForUrl dan WinHttpDetectAutoProxyConfigUrl memblokir fungsi sinkron. Bisa jadi salah satu mekanisme deteksi otomatis tertentu (seperti DHCP) jauh lebih lambat daripada yang lain (seperti DNS). Jika bendera deteksi otomatis WINHTTP_AUTO_DETECT_TYPE_DHCP dan WINHTTP_AUTO_DETECT_TYPE_DNS_A ditentukan, WinHTTP menggunakan DHCP terlebih dahulu, sesuai dengan spesifikasi WPAD. Jika tidak ada URL PAC yang ditemukan dengan mengeluarkan permintaan DHCP, Maka WinHTTP mencoba menemukan file PAC di alamat DNS terkenal.

WinHttpGetProxyForUrl menggunakan parameter handel Sesi WinHTTP untuk penembolokan file PAC dan hasil deteksi otomatis. Yang terbaik adalah menggunakan handel sesi yang sama untuk beberapa panggilan WinHttpGetProxyForUrl jika memungkinkan untuk menghindari deteksi URL PAC berulang dan pengunduhan file. File PAC hanya di-cache dalam memori, dan dibuang ketika aplikasi menutup handel sesi.

Karena dampak performa proksi otomatis, disarankan agar hanya aplikasi atau layanan klien desktop yang menggunakan fitur ini; Aplikasi berbasis server harus mengandalkan administrator server menggunakan utilitas "ProxyCfg.exe".