Validasi Permintaan - Mencegah Serangan Skrip

Makalah ini menjelaskan fitur validasi permintaan ASP.NET di mana, secara default, aplikasi dicegah 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.

Meminta validasi, fitur ASP.NET sejak 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 secara tidak sadar dikirimkan ke server, disimpan, dan kemudian disajikan kepada pengguna lain. Kami masih sangat menyarankan Agar Anda memvalidasi semua data input dan HTML mengodekannya jika sesuai.

Misalnya, Anda membuat halaman Web yang meminta alamat email pengguna lalu menyimpan alamat email tersebut dalam database. Jika pengguna memasukkan <SCRIPT>alert("hello from script")</SCRIPT> alih-alih alamat email yang valid, saat data ditampilkan, skrip ini dapat dijalankan jika konten tidak disandikan 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 mencela situs dengan menampilkan HTML, atau untuk berpotensi menjalankan skrip klien untuk mengalihkan pengguna ke situs peretas, serangan injeksi skrip adalah masalah yang harus dihadiri pengembang Web.

Serangan injeksi skrip menjadi perhatian semua pengembang web, baik yang 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, jika JavaScript seperti <script>alert("hello!")</script> diinput dan dikirim, kami akan mendapatkan exception.

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 dapat menunjukkan upaya untuk membahayakan keamanan aplikasi Anda, seperti serangan pembuatan skrip 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; adalah tanggung jawab pengembang halaman 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 bagian <pages /> ke 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 memperlihatkan 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 mengodekan html konten 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