Bagikan melalui


Validasi Permintaan - Mencegah Serangan Skrip

Makalah ini menjelaskan fitur validasi permintaan ASP.NET di mana, secara default, aplikasi dicegah untuk memproses konten HTML yang tidak dikodekan yang dikirimkan ke server. Fitur validasi permintaan ini dapat dinonaktifkan ketika aplikasi telah dirancang untuk memproses data HTML dengan aman.

Berlaku untuk ASP.NET 1.1 dan ASP.NET 2.0.

Validasi permintaan, fitur dari ASP.NET versi 1.1, mencegah server menerima konten yang berisi HTML yang tidak dikodekan. Fitur ini dirancang untuk membantu mencegah beberapa serangan injeksi skrip di mana kode skrip klien atau HTML dapat tanpa sadar dikirimkan ke server, disimpan, dan kemudian diberikan kepada pengguna lain. Kami masih sangat merekomendasikan Anda untuk memvalidasi semua data input dan HTML serta mengodekannya di saat yang tepat.

Misalnya, Anda membuat halaman Web yang meminta alamat email pengguna lalu menyimpan alamat email tersebut dalam database. Jika pengguna memasukkan <pemberitahuan SKRIP>("hello from script")</SCRIPT> alih-alih alamat email yang valid, ketika data tersebut disajikan, skrip ini dapat dijalankan jika konten tidak dikodekan dengan benar. Fitur validasi permintaan ASP.NET mencegah hal ini terjadi.

Mengapa fitur ini berguna

Banyak situs tidak menyadari bahwa mereka terbuka untuk serangan injeksi skrip sederhana. Apakah tujuan serangan ini adalah untuk merusak situs dengan menampilkan HTML, atau untuk berpotensi mengeksekusi skrip klien untuk mengalihkan pengguna ke situs peretas, serangan injeksi skrip adalah masalah yang harus disandingkan oleh pengembang Web.

Serangan injeksi skrip menjadi perhatian semua pengembang web, baik mereka menggunakan ASP.NET, ASP, atau teknologi pengembangan web lainnya.

Fitur validasi permintaan ASP.NET secara proaktif mencegah serangan ini dengan tidak mengizinkan konten HTML yang tidak dikodekan diproses oleh server kecuali pengembang memutuskan untuk mengizinkan konten tersebut.

Apa yang diharapkan: Halaman Kesalahan

Cuplikan layar di bawah ini menunjukkan beberapa contoh kode ASP.NET:

Cuplikan layar yang memperlihatkan sampel kode ASP.NET.

Menjalankan kode ini menghasilkan halaman sederhana yang memungkinkan Anda memasukkan beberapa teks di kotak teks, klik tombol, dan menampilkan teks dalam kontrol label:

Cuplikan layar yang memperlihatkan menjalankan kode ini menghasilkan halaman sederhana yang memungkinkan Anda memasukkan beberapa teks di kotak teks, klik tombol, dan menampilkan teks dalam kontrol label.

Namun, adalah JavaScript, seperti <script>alert("hello!")</script> untuk dimasukkan dan dikirimkan, kami akan mendapatkan pengecualian:

Jika JavaScript dimasukkan dan dikirimkan, seseorang akan mendapatkan pengecualian.

Pesan kesalahan menyatakan bahwa 'nilai Request.Form yang berpotensi berbahaya terdeteksi' dan memberikan detail lebih lanjut dalam deskripsi tentang apa yang terjadi dan cara mengubah perilaku. Contohnya:

Validasi permintaan telah mendeteksi nilai input klien yang berpotensi berbahaya, dan pemrosesan permintaan telah dibatalkan. Nilai ini mungkin menunjukkan upaya untuk membahayakan keamanan aplikasi Anda, seperti serangan scripting lintas situs. Anda dapat menonaktifkan validasi permintaan dengan mengatur validateRequest=false di direktif Halaman atau di bagian konfigurasi. Namun, sangat disarankan agar aplikasi Anda secara eksplisit memeriksa semua input dalam kasus ini.

Menonaktifkan validasi permintaan pada halaman

Untuk menonaktifkan validasi permintaan pada halaman, Anda harus mengatur validateRequest atribut direktif Halaman ke false:

<%@ Page validateRequest="false" %>

Perhatian

Saat validasi permintaan dinonaktifkan, konten dapat dikirimkan ke halaman; pengembang halaman bertanggung jawab untuk memastikan bahwa konten dikodekan atau diproses dengan benar.

Menonaktifkan validasi permintaan untuk aplikasi Anda

Untuk menonaktifkan validasi permintaan untuk aplikasi, Anda harus memodifikasi atau membuat file Web.config untuk aplikasi Anda dan mengatur atribut validateRequest dari bagian ke <pages />false:

<configuration>
   <system.web>
      <pages validateRequest="false" />
   </system.web>
</configuration>

Jika Anda ingin menonaktifkan validasi permintaan untuk semua aplikasi di server Anda, Anda dapat melakukan modifikasi ini ke file Machine.config Anda.

Perhatian

Ketika validasi permintaan dinonaktifkan, konten dapat dikirimkan ke aplikasi Anda; adalah tanggung jawab pengembang aplikasi untuk memastikan bahwa konten dikodekan atau diproses dengan benar.

Kode di bawah ini dimodifikasi untuk menonaktifkan validasi permintaan:

Cuplikan layar yang menunjukkan kode di bawah ini dimodifikasi untuk menonaktifkan validasi permintaan.

Sekarang jika JavaScript berikut dimasukkan ke dalam kotak <script>alert("hello!")</script> teks, hasilnya adalah:

Cuplikan layar yang memperlihatkan apakah JavaScript dimasukkan ke dalam kotak teks: hasilnya adalah tombol

Untuk mencegah hal ini terjadi, dengan validasi permintaan dinonaktifkan, kita perlu mengodekan konten HTML.

Cara mengodekan konten HTML

Jika Anda telah menonaktifkan validasi permintaan, ada baiknya untuk konten pengodean HTML yang akan disimpan untuk digunakan di masa mendatang. Pengodean HTML akan secara otomatis menggantikan '<' atau '>' (bersama dengan beberapa simbol lain) dengan representasi yang dikodekan HTML yang sesuai. Misalnya, '<' digantikan oleh '<' dan '>' digantikan oleh '>'. Browser menggunakan kode khusus ini untuk menampilkan '<' atau '>' di browser.

Konten dapat dengan mudah dikodekan HTML di server menggunakan Server.HtmlEncode(string) API. Konten juga dapat dengan mudah didekodekan HTML, yaitu, dikembalikan ke HTML standar menggunakan Server.HtmlDecode(string) metode .

Cuplikan layar yang memperlihatkan konten dapat dengan mudah dikodekan HTML di server menggunakan API Server.HtmlEncode(string). Konten juga dapat dengan mudah didekodekan HTML, yaitu, dikembalikan ke HTML standar menggunakan metode Server.HtmlDecode(string).

Menghasilkan:

Cuplikan layar yang memperlihatkan tombol