Berlaku Untuk
Windows 10 Windows 10, version 1511, all editions Windows Server 2012 R2 Datacenter Windows Server 2012 R2 Standard Windows Server 2012 R2 Essentials Windows Server 2012 R2 Foundation Windows 8.1 Enterprise Windows 8.1 Pro Windows 8.1 Windows RT 8.1 Windows Server 2012 Datacenter Windows Server 2012 Datacenter Windows Server 2012 Standard Windows Server 2012 Standard Windows Server 2012 Essentials Windows Server 2012 Foundation Windows Server 2012 Foundation Windows Server 2008 R2 Service Pack 1 Windows Server 2008 R2 Datacenter Windows Server 2008 R2 Enterprise Windows Server 2008 R2 Standard Windows Server 2008 R2 Web Edition Windows Server 2008 R2 Foundation Windows 7 Service Pack 1 Windows 7 Ultimate Windows 7 Enterprise Windows 7 Professional Windows 7 Home Premium Windows 7 Home Basic Windows 7 Starter Windows Server 2008 Service Pack 2 Windows Server 2008 Datacenter Windows Server 2008 Enterprise Windows Server 2008 Standard Windows Server 2008 Web Edition Windows Server 2008 Foundation Windows Server 2008 for Itanium-Based Systems Windows Vista Service Pack 2 Windows Vista Ultimate Windows Vista Enterprise Windows Vista Business Windows Vista Home Premium Windows Vista Home Basic Windows Vista Starter

Gejala

Ketika Anda menggunakan fitur IIS Common Gateway Interface (CGI) ke host program yang dapat dijalankan yang menggunakan perpustakaan tertentu untuk mengarahkan permintaan, permintaan mungkin akan salah arah berdasarkan pada keberadaan header permintaan "PROXY". Beberapa platform aplikasi web yang dikenal menggunakan perpustakaan ini. Ini termasuk PHP, Python dan Go, antara lain.

Penyebab

CGI adalah antarmuka yang memungkinkan server web untuk aplikasi host yang dijalankan sebagai proses yang dapat dijalankan. Ketika permintaan diterima oleh web server, server mulai proses baru untuk menangani permintaan tunggal. Ketika permintaan selesai, proses akan keluar. Agar proses untuk mendapatkan akses ke data permintaan, header permintaan disertakan sebagai variabel lingkungan yang memiliki "HTTP_" prepended ke nama. Oleh karena itu, proses CGI untuk permintaan yang berisi judul yang bernama "Proxy" memiliki variabel lingkungan "HTTP_PROXY" yang memiliki nilai yang sama sebagai header permintaan.Baris perintah cURL dan Perpustakaan biasanya digunakan untuk mengaktifkan berbagai macam aplikasi untuk membuat permintaan untuk berbagai jenis server, termasuk server web. Perpustakaan ini dapat dikonfigurasi menggunakan parameter baris perintah, atau dapat membaca parameter konfigurasi dari variabel lingkungan host proses. "HTTP_PROXY" adalah salah satu dari banyak parameter konfigurasi yang digunakan oleh cURL. "HTTP_PROXY" digunakan oleh cURL untuk mengirim permintaan HTTP melalui proksi dikonfigurasi.Catatan Hal ini tidak terkait dengan "HTTP_PROXY" sebagai representasi header permintaan klien.Ketika cURL berada dalam proses CGI, dan proses berisi variabel lingkungan yang bernama "HTTP_PROXY", cURL menggunakan nilai untuk mengirim data yang diminta melalui HTTP proxy nilai yang ditetapkan di variabel lingkungan. Ini terjadi karena cURL mengharapkan "HTTP_PROXY" adalah petunjuk konfigurasi dan tidak header permintaan klien.

Pemecahan masalah

Untuk mengatasi masalah ini, jangan gunakan CGI di server yang menjalankan IIS. CGI adalah antarmuka sebagian besar lama yang digantikan dengan antarmuka yang lebih baru dan lebih terkait kinerja. Khususnya, PHP, Python dan Go harus host melalui FastCGI pada IIS. FastCGI tidak menggunakan variabel lingkungan untuk header permintaan klien dan tidak memiliki masalah ini. Namun untuk PHP, beberapa aplikasi mungkin menggunakan fungsi getenv() PHPs untuk mengambil variabel lingkungan. Bahkan ketika PHP tidak berada di dalam proses CGI, itu meniru perilaku CGI dengan memasukkan nilai-nilai header permintaan ke set data yang tersedia untuk fungsi getenv() . Jika Anda menggunakan aplikasi PHP yang mengambil HTTP_PROXY dengan cara ini, mitigations berikut menghapus nilai header atau menolak permintaan dengan PROXY header efektif.Jika Anda harus menggunakan CGI untuk beberapa alasan, memblokir permintaan yang berisi header permintaan yang bernama "Proxy" atau menghapus nilai header.  Hal ini karena "Proxy" bukan nama header permintaan standar dan browser umumnya tidak akan mengirimkan informasi.Untuk memblokir permintaan yang berisi header Proxy (solusi yang dipilih), jalankan baris perintah berikut ini:

appcmd menetapkan konfigurasi /section:requestfiltering / + requestlimits.headerLimits. [header = proxy, sizelimit = '0']Catatan Appcmd.exe tidak biasanya di jalur dan dapat ditemukan di direktori %systemroot%\system32\inetsrvUntuk menghapus nilai header, Anda dapat menggunakan aturan penulisan ulang URL berikut ini:

<system.webServer>    <rewrite>        <rules>            <rule name="Erase HTTP_PROXY" patternSyntax="Wildcard">                <match url="*.*" />                <serverVariables>                    <set name="HTTP_PROXY" value="" />                </serverVariables>                <action type="None" />            </rule>        </rules>    </rewrite></system.webServer>

Catatan Penulisan ulang URL yang dapat diunduh add-in untuk IIS dan tidak disertakan di penginstalan asali IIS.

Perlu bantuan lainnya?

Ingin opsi lainnya?

Jelajahi manfaat langganan, telusuri kursus pelatihan, pelajari cara mengamankan perangkat Anda, dan banyak lagi.