Saya mencari solusi apa pun untuk mendapatkan permintaan IIS dengan benar seperti /programming//% dan http://bing.com/% untuk tidak menampilkan halaman 400 Permintaan Buruk, tetapi menampilkan halaman kesalahan khusus mirip dengan bagaimana http://google.com/% dan http://facebook.com/% lakukan (jelas contoh-contoh itu tidak ada di IIS).
Saya percaya saya telah mencoba mengatur semua pengaturan registri http.sys yang berlaku (AllowRestrictedChars, PercentUAlowed) per http://support.microsoft.com/kb/820129 tetapi itu tidak membantu. Pengaturan AllowRestrictedChars dan halaman kustom 400 telah memperbaiki url seperti /programming//%12 tetapi tidak /%.
Jawaban:
Ini diblokir tepat di tingkat kernel IIS. Sebagai ujian saya mengeluarkan semua modul di IIS sehingga bahkan tidak memiliki pengendali halaman statis, dan masih menampilkan pesan kesalahan 400.
Saya tidak percaya itu mungkin dengan IIS untuk mengatasi itu. Pengaturan registri yang Anda sebutkan adalah untuk jenis karakter terbatas lainnya. Saya belum melihat tuas untuk mengubah fungsi itu.
Apa tujuan Anda menghindari itu? Ini membuka permukaan serangan Anda lebih luas, dan saya tidak bisa membayangkan pengunjung yang sah hilang karena memblokir urutan URL melarikan diri yang tidak lengkap.
Update2: Berikut adalah tiga tautan bagus untuk ini. Baik Nazim Lala dan Wade Hilmo dari tim IIS telah membuat blog tentang hal ini karena diskusi seputar pertanyaan Anda. Scott Hanselman juga memiliki pos yang bagus di bagian querystring dalam .NET:
Pembaruan: Saya memeriksa dengan anggota tim IIS untuk mendapatkan jawaban yang sah. Dia menyebutkan bahwa% dianggap sebagai karakter yang tidak aman menurut RFC 1738 ( http://www.ietf.org/rfc/rfc1738.txt ).
Inilah teks yang relevan:
Jadi IIS secara proaktif memblokir ini di tingkat inti, langkah keamanan proaktif untuk meminimalkan permukaan serangan mereka.
sumber
Saya dapat memikirkan 3 cara yang mungkin
Ubah IIS untuk menunjuk ke halaman kustom untuk 400 kesalahan daripada biasanya
Jika ini unik untuk situs web tertentu di IIS, Anda dapat melakukan sesuatu seperti ini di web.config:
<customErrors defaultRedirect = "ErrorPage.aspx" mode = "On">
<error statusCode = "400" redirect = "myCustom400Error.aspx" />
</customErrors>
Tulis httpModule yang memeriksa URL yang masuk dan menanganinya
sumber
Satu-satunya cara untuk mengatasi ini adalah dengan memeriksa URL sebelum kernel IIS bisa.
Anda harus mengirim tautan yang dibuat secara dinamis melalui skrip untuk memeriksanya sebelum meneruskan pengguna akhir Anda ke URL itu ...
Kecuali itu, Anda tahu ini adalah satu-satunya situasi di mana IIS tidak akan menanganinya seperti yang Anda inginkan. Jadi, dengan proses eliminasi, jika Anda memiliki permintaan yang tidak ditangani, Anda tahu apa yang menyebabkannya.
Mungkin memeriksa perujuk di halaman 400 kustom akan membantu mempersempit sumber lalu lintas?
sumber
Posting ini di forum IIS menunjukkan bahwa HTTP 400 (Permintaan Buruk) diblokir oleh http.sys dan tidak membuatnya ke IIS yang cocok dengan tautan yang disertakan oleh @Scott Forsyth - MVP pada jawaban aslinya.
Anda dapat melihat log permintaan ini di bawah c: \ Windows \ System32 \ LogFiles \ HTTPERR \
Saya tidak tahu apakah Anda dapat mengonfigurasi halaman respons yang dikirim kembali ke pengguna untuk kesalahan semacam ini, tetapi karena bahkan Bing menderita masalah ini, saya menduga itu tidak mungkin atau akan memerlukan beberapa peretasan sistem yang mengerikan.
sumber