Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. ASP.NET
Code

Memahami Pemalsuan Permintaan Lintas Situs di .NET

by
Length:MediumLanguages:

Indonesian (Bahasa Indonesia) translation by Nurul Fatimah (you can also view the original English article)

Anda hanya dapat menghasilkan aplikasi web yang aman dengan mempertimbangkan keamanan, dari awal. Ini membutuhkan pemikiran tentang cara potensial seseorang dapat menyerang situs Anda saat Anda membuat setiap halaman, formulir, dan tindakan. Ini juga membutuhkan pemahaman tentang jenis masalah keamanan yang paling umum dan cara mengatasinya.

Jenis lubang keamanan yang paling umum di halaman web memungkinkan penyerang untuk mengeksekusi perintah atas nama pengguna, tetapi tidak diketahui oleh pengguna. Permintaan pemalsuan permintaan lintas situs memanfaatkan kepercayaan yang telah dibuat oleh situs web dengan browser web pengguna.

Dalam tutorial ini, kita akan membahas apa serangan pemalsuan permintaan lintas situs dan bagaimana itu dijalankan. Kemudian kita akan membangun aplikasi ASP.NET MVC sederhana yang rentan terhadap serangan ini dan memperbaiki aplikasi untuk mencegahnya terjadi lagi.


Apakah Pemalsuan Permintaan Lintas Situs? 

Cross-site permintaan pemalsuan serangan pertama mengasumsikan bahwa korban telah sudah dikonfirmasi pada situs target, seperti situs perbankan, Paypal atau situs lain akan diserang. Otentikasi ini harus disimpan di jalan sehingga jika pengguna meninggalkan situs dan kembali, mereka masih dipandang sebagai login oleh situs target. Penyerang kemudian harus mendapatkan korban untuk mengakses halaman atau link yang akan mengeksekusi permintaan atau posting ke situs target. Jika serangan bekerja, kemudian situs target akan melihat permintaan yang datang dari korban dan mengeksekusi permintaan seperti pengguna tersebut. Ini, pada dasarnya, memungkinkan penyerang melaksanakan tindakan yang diinginkan dalam situs yang ditargetkan sebagai korban. Potensi hasilnya bisa mentransfer uang, membuat ulang sandi, atau mengubah alamat email di situs yang ditargetkan.

Bagaimana Serangan Bekerja 

Tindakan membuat korban menggunakan tautan tidak mengharuskan mereka mengeklik tautan. Tautan gambar sederhana juga bisa: 

Termasuk link seperti ini pada sebaliknya tampaknya tidak berbahaya forum posting, blog komentar, atau media sosial situs dapat menangkap pengguna tidak menyadari. Contoh yang lebih kompleks menggunakan JavaScript untuk membangun permintaan HTTP post lengkap dan kirimkan ke situs target.


Membangun sebuah aplikasi Web yang rentan di ASP.NET MVC

Mari kita membuat sebuah aplikasi ASP.NET MVC sederhana dan meninggalkannya rentan terhadap serangan ini. Aku akan menggunakan Visual Studio 2012 untuk contoh-contoh ini, tetapi ini akan juga bekerja di Visual Studio 2010 atau Visual Web Developer 2010 akan bekerja jika Anda telah menginstal dukungan untuk 4 MVC yang dapat didownload dan diinstal dari Microsoft.

new-db-column

Mulai dengan menciptakan sebuah proyek baru dan memilih untuk menggunakan template Internet Project. Mesin pandangan baik akan bekerja, tapi di sini saya akan menggunakan mesin Lihat ASPX.

Kita akan menambahkan satu bidang ke meja UserProfile untuk menyimpan alamat email. Di bawah Server Explorer memperluas sambungan Data. Anda harus melihat Default sambungan dibuat dengan informasi login dan keanggotaan. Klik kanan pada tabel UserProfile dan klik Open Table Definition. Pada baris kosong di bawah meja UserName, kita akan menambahkan sebuah kolom baru untuk email. Nama kolom emailaddress, berikan jenis nvarchar(MAX), dan periksa pilihan Allow Nulls. Sekarang klik Update untuk menyimpan versi baru dari tabel.

Ini memberikan template dasar aplikasi web, dengan dukungan login, sangat mirip dengan apa yang banyak penulis akan mulai dengan mencoba untuk membuat aplikasi. Jika Anda menjalankan app sekarang, Anda akan melihat ini menampilkan dan fungsional. Tekan F5 atau menggunakan DEBUG -> Start Debugging dari menu untuk memunculkan website.

default-web-page

Mari kita membuat account pengujian yang bisa kita gunakan untuk contoh ini. Klik pada Register link dan membuat account dengan setiap username dan password yang Anda inginkan. Di sini saya akan menggunakan account yang disebut testuser. Setelah pembuatan, Anda akan melihat bahwa saya sekarang log in sebagai testuser. Setelah Anda melakukan ini, keluar dan mari kita menambahkan halaman aplikasi ini memungkinkan pengguna untuk mengubah email mereka.

default-register

Sebelum kita membuat halaman tersebut untuk mengubah alamat email, pertama kita perlu membuat satu perubahan ke aplikasi sehingga kode menyadari kolom baru yang hanya menambahkan. Buka file AccountModels.cs di bawah folder Model dan update UserProfile kelas untuk mencocokkan berikut. Ini memberitahu kelas tentang kolom baru di mana kita akan menyimpan alamat email untuk account.

Buka AccountController.cs file. Setelah RemoveExternalLogins fungsi Tambahkan kode berikut untuk membuat tindakan baru. Ini akan mendapatkan email saat ini untuk pengguna login dan menyebarkannya ke tampilan untuk tindakan.

Kita juga perlu menambahkan tampilan sesuai untuk tindakan ini. Ini harus menjadi sebuah file bernama ChangeEmail.aspx di bawah Views\Account folder:

Ini memberikan sebuah halaman baru yang bisa kita gunakan untuk mengubah alamat email untuk saat ini login pengguna.

change-email-page

Jika kita menjalankan Halaman ini dan pergi ke tindakan /Account/ChangeEmail, kita sekarang melihat saat ini tidak memiliki email. Tapi kita memiliki kotak teks dan tombol yang dapat kita gunakan untuk memperbaiki hal itu. Pertama, kita perlu membuat tindakan yang akan mengeksekusi, ketika formulir pada Halaman ini dikirimkan.

Setelah membuat perubahan ini, menjalankan website dan lagi pergi ke tindakan /Account/ChangeEmail yang kami hanya dibuat. Anda sekarang dapat memasukkan alamat email yang baru dan klik tombol Change Email dan lihat bahwa alamat email yang akan diperbarui.


Menyerang Situs 

Seperti ditulis, aplikasi kita rentan terhadap cross-site permintaan pemalsuan serangan. Mari kita tambahkan halaman web untuk melihat serangan ini dalam tindakan. Kita akan menambahkan halaman dalam situs web yang akan mengubah email ke nilai yang berbeda. Dalam HomeController.cs file, kita akan menambahkan tindakan baru bernama AttackForm.

Kita juga akan menambahkan pandangan untuk AttackForm.aspx ini bernama di bawah folder /Views/Home. Seharusnya terlihat seperti ini:

Halaman kita membantu mengumumkan niat jahatnya, yang tentu saja serangan yang sebenarnya tidak akan dilakukan. Halaman ini berisi formulir tersembunyi yang tidak akan terlihat oleh pengguna. Kemudian menggunakan Javascript untuk secara otomatis mengirimkan formulir ini ketika halaman dibuka. 

attack-form

Jika Anda menjalankan situs lagi dan pergi ke halaman /Home/AttackForm, Anda akan melihat bahwa beban baik saja, tapi tidak ada indikasi luar bahwa sesuatu telah terjadi. Jika Anda sekarang pergi ke halaman /Account/ChangeEmail meskipun, Anda akan melihat bahwa email Anda telah berubah untuk newemail@evilsite.com. Di sini tentu saja, kita sengaja membuat ini jelas, tetapi dalam serangan nyata, Anda mungkin tidak menyadari bahwa email Anda telah dimodifikasi.


Memitigasi Pemalsuan Permintaan Lintas Situs 

Ada dua cara utama untuk mengurangi jenis serangan. Pertama, kita dapat memeriksa arahan yang permintaan web yang diterima dari. Ini harus memberitahu aplikasi ketika pengiriman form tidak datang dari server. Ini memiliki dua masalah meskipun. Banyak proxy server menghapus informasi arahan ini, baik sengaja untuk melindungi privasi atau sebagai efek samping, berarti permintaan sah bisa tidak berisi informasi ini. Itu juga mungkin bagi penyerang untuk memalsukan rujukan, meskipun itu meningkatkan kompleksitas serangan.

Metode yang paling efektif adalah dengan mengharuskan bahwa ada tanda tertentu pengguna untuk setiap pengiriman form. Nilai token ini harus dihasilkan secara acak setiap kali dibuat bentuk dan bentuk hanya akan diterima jika token disertakan. Jika token hilang atau nilai yang berbeda disertakan, maka kami tidak mengizinkan pengiriman form. Nilai ini dapat disimpan di pengguna sesi negara atau di cookie untuk memungkinkan kita untuk memverifikasi nilai ketika formulir dikirimkan.

ASP.NET membuat proses ini mudah, karena dukungan CSRF dibangun. Untuk menggunakannya, kita hanya perlu membuat dua perubahan ke situs.


Memperbaiki Masalah 

Pertama, kita harus menambahkan token unik ke dalam formulir untuk mengubah email pengguna ketika kita menampilkan itu. Update dalam bentuk dalam tampilan ChangeEmail.aspx dalam /Account/ChangeForm:

Ini baris baru: <%: Html.AntiForgeryToken() %> memberitahu ASP.NET untuk menghasilkan tanda dan tempat itu sebagai suatu bidang tersembunyi di formulir. Selain itu, rangka menangani menempatkannya di lokasi lain di mana aplikasi dapat mengakses kemudian untuk memverifikasi itu.

Jika kita memuat halaman sekarang dan melihat sumber, kita akan melihat baris baru ini, dalam bentuk, diberikan ke browser. Ini adalah tanda kami:

Kita juga perlu untuk membuat perubahan ke tindakan kita membiarkan hal itu tahu bahwa kami telah menambahkan token ini dan bahwa itu harus memverifikasi token sebelum menerima formulir diposting.

Sekali lagi ini sederhana dalam ASP.NET MVC. Di bagian atas tindakan yang dibuat untuk menangani formulir yang diposting, yang dengan atribut [HttpPost] ditambahkan, kita akan menambahkan atribut lain bernama [ValidateAntiForgeryToken]. Hal ini membuat dimulainya tindakan kita sekarang terlihat seperti berikut:

Mari kita menguji hal ini. Pertama pergi ke halaman /Account/ChangeEmail dan mengembalikan email untuk account Anda ke nilai yang diketahui. Kemudian kita dapat kembali ke halaman /Home/AttackForm dan lagi kode serangan upaya untuk mengubah email. Jika Anda kembali ke halaman /Account/ChangeEmail lagi, kali ini Anda akan melihat bahwa email sebelumnya dimasukkan masih aman dan utuh. Perubahan yang kita buat untuk bentuk dan tindakan kita dilindungi laman ini dari serangan.

Jika Anda adalah untuk melihat bentuk serangan langsung (mudah dilakukan dengan menghapus <iframe> tag sekitar formulir di halaman serangan, Anda akan melihat kesalahan yang sebenarnya terjadi ketika bentuk serangan berusaha posting.

failed-attack

Dua baris tambahan yang ditambahkan ke situs ini cukup untuk melindungi kita dari kesalahan ini. 


Kesimpulan

Pemalsuan permintaan lintas situs adalah salah satu serangan yang paling umum dan berbahaya di situs web. Mereka sering dikombinasikan dengan teknik lain yang mencari kelemahan di situs untuk mempermudah serangan. Di sini saya telah menunjukkan cara untuk mengamankan situs NET Anda. Terhadap jenis serangan ini dan membuat situs web Anda lebih aman bagi pengguna Anda. 

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.