Gunakan Pemfilteran Permintaan
oleh Tim IIS
Pengantar
UrlScan, alat keamanan, disediakan sebagai add-on untuk versi Internet Information Services (IIS) yang lebih lama sehingga administrator dapat memberlakukan kebijakan keamanan yang lebih ketat di server Web mereka. Dalam IIS 7 ke atas, semua fitur inti URLScan telah dimasukkan ke dalam modul yang disebut Pemfilteran Permintaan, dan fitur Segmen Tersembunyi telah ditambahkan. Artikel ini menjelaskan setiap fitur Pemfilteran Permintaan dan memberikan contoh bagaimana fitur dapat diterapkan di lingkungan Anda.
Perhatikan bahwa IIS juga menyertakan modul untuk penulisan ulang URL. Ada perbedaan antara kedua modul ini: Pemfilteran permintaan dirancang dan dioptimalkan untuk skenario keamanan, sementara penulisan ulang URL dapat diterapkan untuk serangkaian skenario yang luas (skenario keamanan hanyalah subset dari ini). Untuk informasi selengkapnya tentang perbedaannya, lihat IIS 7.0 dan Di Atas Pemfilteran Permintaan dan Penulisan Ulang URL.
Filter Permintaan Double-Encoded
Fitur ini mencegah serangan yang mengandalkan permintaan yang dikodekan ganda dan berlaku jika penyerang mengirimkan permintaan yang dikodekan ganda yang dibuat dengan hati-hati ke IIS. Ketika filter permintaan yang dikodekan ganda diaktifkan, IIS menormalkan URL dua kali; jika normalisasi pertama berbeda dari yang kedua, permintaan ditolak dan kode kesalahan yang dicatat adalah 404.11. Filter permintaan yang dikodekan ganda adalah opsi VerifyNormalization di UrlScan.
Jika Anda tidak ingin IIS mengizinkan permintaan berkode ganda dilayani, gunakan hal berikut:
<configuration>
<system.webServer>
<security>
<requestFiltering
allowDoubleEscaping="false">
</requestFiltering>
</security>
</system.webServer>
</configuration>
Filter Karakter Bit Tinggi
Fitur ini memungkinkan atau menolak semua permintaan ke IIS yang berisi karakter non-ASCII dan mencatat kode kesalahan 404.12. UrlScan yang setara adalah AllowHighBitCharacters.
Misalnya, Anda ingin mengizinkan karakter bit tinggi untuk satu aplikasi tetapi tidak untuk seluruh server. Atur allowHighBitCharacters="false" dalam file ApplicationHost.config; tetapi dalam akar aplikasi, buat file Web.config yang memungkinkan aplikasi tunggal tersebut menerima karakter non-ASCII. Dalam file Web.config, gunakan:
<configuration>
<system.webServer>
<security>
<requestFiltering
allowHighBitCharacters="true"
>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Filter Berdasarkan Ekstensi File
Fitur ini mendefinisikan sekumpulan ekstensi file yang diizinkan yang dilayani IIS. Ketika IIS menolak permintaan berdasarkan ekstensi file, kode kesalahan yang dicatat adalah 404.7. Opsi AllowExtensions dan DenyExtensions setara urlScan.
Misalnya, Anda ingin mengizinkan setiap jenis file kecuali file ASP. Atur opsi allowUnlisted untuk fileExtensions ke "true", lalu tentukan entri ekstensi file untuk secara eksplisit menolak ASP:
<configuration>
<system.webServer>
<security>
<requestFiltering>
<fileExtensions allowUnlisted="true" >
<add fileExtension=".asp" allowed="false"/>
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Filter Berdasarkan Batas Permintaan
Filter ini menggabungkan tiga fitur (yang memiliki nama yang sama di UrlScan):
- maxAllowedContentLength–batas atas pada ukuran konten
- maxUrl–upper bound pada panjang URL
- maxQueryString–batas atas pada panjang string kueri
Ketika IIS menolak permintaan berdasarkan batas permintaan, kode kesalahan yang dicatat adalah:
- 413.1 jika konten terlalu panjang.
- 404.14 jika URL terlalu besar.
- 404.15 jika string kueri terlalu panjang.
Misalnya, sangat umum bagi perusahaan untuk membeli perangkat lunak yang mereka tidak memiliki akses kode sumber. Seiring waktu, mereka mungkin menemukan kerentanan dalam kode tersebut. Mendapatkan pembaruan untuk kode yang terpengaruh seringkali tidak mudah. Masalah sering disebabkan oleh URL atau string kueri yang terlalu panjang atau oleh kelebihan konten yang dikirim ke aplikasi. Setelah menentukan batas atas yang aman, Anda dapat menerapkan batas menggunakan konfigurasi di bawah ini, tanpa harus menambal biner aplikasi:
<configuration>
<system.webServer>
<security>
<requestFiltering>
<requestLimits
maxAllowedContentLength="30000000"
maxUrl="260"
maxQueryString="25"
/>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Filter menurut Kata Kerja
Fitur ini mendefinisikan daftar kata kerja yang diterima IIS sebagai bagian dari permintaan. Ketika IIS menolak permintaan berdasarkan fitur ini, kode kesalahan yang dicatat adalah 404.6. Ini sesuai dengan opsi UseAllowVerbs, AllowVerbs, dan DenyVerbs di UrlScan.
Misalnya, Anda hanya ingin mengizinkan kata kerja GET saja. Untuk mengatur ini, Anda harus terlebih dahulu mengunci konfigurasi sehingga tidak ada kata kerja yang diizinkan dengan mengatur opsi allowUnlisted="false". Selanjutnya, cantumkan kata kerja yang ingin Anda izinkan secara eksplisit, dalam hal ini, GET.
<configuration>
<system.webServer>
<security>
<requestFiltering>
<verbs
allowUnlisted="false"
>
<add verb="GET" allowed="true" />
</verbs>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Filter Berdasarkan Urutan URL
Fitur ini mendefinisikan daftar urutan yang ditolak IIS saat merupakan bagian dari permintaan. Ketika IIS menolak permintaan untuk fitur ini, kode kesalahan yang dicatat adalah 404.5.Ini sesuai dengan fitur DenyUrlSequences di UrlScan.
Ini adalah fitur yang sangat kuat. Dengan menggunakan kode berikut, Anda dapat mencegah urutan karakter tertentu dilayani oleh IIS:
<configuration>
<system.webServer>
<security>
<requestFiltering>
<denyUrlSequences>
<add sequence=".."/>
</denyUrlSequences>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Dalam contoh sebelumnya, '..' urutan ditolak. Misalkan Anda membeli aplikasi dari vendor yang keluar dari bisnis dan Anda menemukan bahwa aplikasi rentan ketika urutan karakter tertentu dikirim ke dalamnya. Dengan menggunakan fitur ini, Anda dapat melindungi aplikasi tersebut hanya dengan menambahkan urutan URL tersebut ke daftar yang ditolak tanpa harus menambal kode aplikasi.
Filter Segmen Tersembunyi
Fitur ini memungkinkan Anda menentukan segmen mana yang "servable." Ketika IIS menolak permintaan berdasarkan fitur ini, kode kesalahan yang dicatat adalah 404.8. Fitur ini baru menggunakan IIS 7 ke atas; itu bukan bagian dari UrlScan.
Pertimbangkan contoh berikut di mana ada dua URL di server:
http://site.com/bin
http://site.com/binary
Misalkan Anda ingin mengizinkan konten di direktori biner, tetapi bukan konten di direktori bin. Jika Anda menggunakan urutan URL dan menolak urutan "bin", Anda menolak akses ke kedua URL. Dengan menggunakan konfigurasi yang ditunjukkan di bawah ini, Anda dapat menolak akses ke bin, tetapi masih memiliki konten dalam biner yang disajikan:
<configuration>
<system.webServer>
<security>
<requestFiltering>
<hiddenSegments>
<add segment="BIN"/>
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Kode Kesalahan IIS 7 dan Di Atas
Di versi sebelumnya, Anda dapat menggunakan UrlScan di tingkat global untuk menentukan kebijakan keamanan yang ingin Anda terapkan pada sistem Anda. Dengan IIS 7 ke atas, Anda masih dapat menerapkan polisi tersebut di tingkat global, tetapi juga per URL. Oleh karena itu, Anda dapat memanfaatkan semua manfaat yang diberikan model delegasi kaya baru.
Tabel berikut adalah ringkasan kode kesalahan log IIS:
Kesalahan | Kode Status |
---|---|
Situs tidak ditemukan | 404.1 |
Ditolak oleh kebijakan | 404.2 |
Ditolak oleh peta mime | 404.3 |
Tidak ada handler | 404.4 |
Pemfilteran Permintaan: Urutan URL ditolak | 404.5 |
Pemfilteran Permintaan: Kata kerja ditolak | 404.6 |
Pemfilteran Permintaan: Ekstensi file ditolak | 404.7 |
Pemfilteran Permintaan: Ditolak oleh segmen tersembunyi | 404.8 |
Ditolak karena atribut file tersembunyi telah diatur | 404.9 |
Pemfilteran Permintaan: Ditolak karena URL lolos dua kali lipat | 404.11 |
Pemfilteran Permintaan: Ditolak karena karakter bit tinggi | 404.12 |
Pemfilteran Permintaan: Ditolak karena URL terlalu panjang | 404.14 |
Pemfilteran Permintaan: Ditolak karena string kueri terlalu panjang | 404.15 |
Pemfilteran Permintaan: Ditolak karena panjang konten terlalu besar | 413.1 |
Pemfilteran Permintaan: Ditolak karena header permintaan terlalu panjang | 431 |
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk