Validasi tujuan, penjelasan, dan contoh

310

Bisakah Anda menjelaskan tujuan ValidateAntiForgeryToken dan menunjukkan kepada saya contoh tentang ValidateAntiForgeryTokendi MVC 4?

Saya tidak dapat menemukan contoh yang menjelaskan atribut ini?

Tabriz Atayi
sumber
1
Ngomong-ngomong, saya benar-benar tidak mengerti mengapa MS belum memungkinkan untuk menempatkan ini tepat di dalam .BeginFormhelper. Jadi benda ini ada di sana secara otomatis, seperti di Rails
jazzcat

Jawaban:

350

Dukungan anti-pemalsuan MVC menulis nilai unik untuk cookie khusus HTTP dan kemudian nilai yang sama ditulis ke formulir. Saat halaman dikirimkan, kesalahan muncul jika nilai cookie tidak cocok dengan nilai formulir.

Penting untuk dicatat bahwa fitur ini mencegah pemalsuan permintaan lintas situs . Yaitu, formulir dari situs lain yang memposting ke situs Anda dalam upaya untuk mengirimkan konten tersembunyi menggunakan kredensial pengguna yang diautentikasi. Serangan melibatkan menipu pengguna yang masuk log untuk mengirimkan formulir, atau dengan hanya secara terprogram memicu formulir ketika halaman dimuat.

Fitur ini tidak mencegah pemalsuan data jenis lain atau merusak serangan berbasis.

Untuk menggunakannya, hiasi metode tindakan atau pengontrol dengan ValidateAntiForgeryTokenatribut dan lakukan panggilan ke @Html.AntiForgeryToken()dalam formulir yang diposkan ke metode tersebut.

Richard Szalay
sumber
5
@ Chris Keduanya. Sesuai jawaban saya: "menulis nilai unik ke cookie khusus HTTP dan kemudian nilai yang sama ditulis ke formulir "
Richard Szalay
21
Mengapa ini tidak disetel secara default?
Christian Hagelid
12
@ Kristen karena bukan Ruby on Rails. ;-)
Martin Capodici
6
Tampaknya bentuk __RequestVerificationToken dan cookie __RequestVerificationToken tidak sama, mereka bekerja sebagai pasangan.
WaiKit Kung
5
@ Tidak Sama sekali, CORS dan CSRF sama sekali berbeda. CORS adalah untuk mengizinkan domain lain untuk mengakses API di server Anda, CSRF adalah tentang memastikan bahwa posting formulir berasal dari halaman yang Anda harapkan.
Richard Szalay
52

Tujuan dasar dari atribut ValidateAntiForgeryToken adalah untuk mencegah serangan pemalsuan permintaan lintas situs.

Pemalsuan permintaan lintas situs adalah serangan di mana elemen skrip, perintah jahat, atau kode berbahaya dikirim dari peramban pengguna tepercaya. Untuk informasi lebih lanjut tentang hal ini, silakan kunjungi http://www.asp.net/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages .

Sangat mudah digunakan, Anda perlu menghias metode dengan atribut ValidateAntiForgeryToken seperti di bawah ini:

[HttpPost]  
[ValidateAntiForgeryToken]  
public ActionResult CreateProduct(Product product)  
{
  if (ModelState.IsValid)  
  {
    //your logic 
  }
  return View(ModelName);
}

Ini berasal dari namespace System.Web.Mvc.

Dan dalam pandangan Anda, tambahkan kode ini untuk menambahkan token sehingga digunakan untuk memvalidasi formulir setelah pengiriman.

@Html.AntiForgeryToken()
Chandra Malla
sumber
Ya Anda benar, Anda perlu memanggil @ Html.AntiForgeryToken () dari formulir Anda dan menambahkan ValidateAntiForgeryTokenAttribute ke metode tindakan yang ingin Anda lindungi.
Chandra Malla
Terima kasih atas jawaban yang mudah dimengerti ini :)
noobprogrammer
4

Di ASP.Net Core token anti pemalsuan secara otomatis ditambahkan ke formulir, jadi Anda tidak perlu menambahkan @Html.AntiForgeryToken()jika Anda menggunakan elemen bentuk silet atau jika Anda menggunakan IHtmlHelper.BeginForm dan jika metode formulir tidak MENDAPATKAN.

Ini akan menghasilkan elemen input untuk formulir Anda yang mirip dengan ini: <input name="__RequestVerificationToken" type="hidden" value="CfDJ8HSQ_cdnkvBPo-jales205VCq9ISkg9BilG0VXAiNm3Fl5Lyu_JGpQDA4_CLNvty28w43AL8zjeR86fNALdsR3queTfAogif9ut-Zd-fwo8SAYuT0wmZ5eZUYClvpLfYm4LLIVy6VllbD54UxJ8W6FA">

Dan ketika pengguna mengirimkan formulir token ini diverifikasi di sisi server jika validasi diaktifkan.

[ValidateAntiForgeryToken]atribut dapat digunakan untuk tindakan. Permintaan yang dibuat pada tindakan yang menerapkan filter ini diblokir kecuali permintaan tersebut menyertakan token anti-pemalsuan yang valid.

[AutoValidateAntiforgeryToken]atribut dapat digunakan terhadap pengontrol. Atribut ini bekerja secara identik dengan atribut ValidateAntiForgeryToken, kecuali bahwa itu tidak memerlukan token untuk permintaan yang dibuat menggunakan metode HTTP berikut: GET HEAD OPTIONS TRACE

Informasi tambahan: https://docs.microsoft.com/pl-pl/aspnet/core/security/anti-request-forgery

gunting
sumber
2

Microsoft menyediakan fungsionalitas internal yang kami gunakan dalam aplikasi kami untuk tujuan keamanan, jadi tidak ada yang bisa meretas situs kami atau menyerang beberapa informasi penting.

Dari Purpose Of ValidateAntiForgeryToken In MVC Application oleh Harpreet Singh:

Penggunaan ValidateAntiForgeryToken

Mari kita coba dengan contoh sederhana untuk memahami konsep ini. Saya tidak ingin membuatnya terlalu rumit, itu sebabnya saya akan menggunakan templat aplikasi MVC, sudah tersedia di Visual Studio. Kami akan melakukan langkah demi langkah. Ayo mulai.

  1. Langkah 1 - Buat dua aplikasi MVC dengan templat internet default dan beri nama masing-masing sebagai CrossSite_RequestForgery dan Attack_Application.

  2. Sekarang, buka Konfigurasi Web aplikasi CrossSite_RequestForgery dan ubah string koneksi dengan yang diberikan di bawah ini lalu simpan.

`

<connectionStrings> <add name="DefaultConnection" connectionString="Data Source=local\SQLEXPRESS;Initial Catalog=CSRF;
Integrated Security=true;" providerName="System.Data.SqlClient" /> 
 </connectionStrings>
  1. Sekarang, klik Tools >> NuGet Package Manager, lalu Package Manager Console

  2. Sekarang, jalankan tiga perintah yang disebutkan di bawah ini di Package Manager Console untuk membuat database.

Aktifkan-migrasi, tambah-migrasi, perbarui-basis data pertama

Catatan Penting - Saya telah membuat database dengan pendekatan kode pertama karena saya ingin membuat contoh ini dalam cara kerja pengembang. Anda dapat membuat basis data secara manual juga. Itu pilihanmu.

  1. Sekarang, buka Pengontrol Akun. Di sini, Anda akan melihat metode daftar yang jenisnya diposkan. Di atas metode ini, harus ada atribut yang tersedia sebagai [ValidateAntiForgeryToken]. Komentar atribut ini. Sekarang, klik kanan pada register dan klik go to View. Di sana lagi, Anda akan menemukan penolong html sebagai @ Html.AntiForgeryToken (). Komentar yang ini juga. Jalankan aplikasi dan klik tombol register. URL akan terbuka sebagai:

http: // localhost: 52269 / Akun / Daftar

Catatan - Saya tahu sekarang pertanyaan yang muncul di benak semua pembaca adalah mengapa kedua pembantu ini perlu dikomentari, karena semua orang tahu ini digunakan untuk memvalidasi permintaan. Lalu, saya hanya ingin membuat Anda semua tahu bahwa ini hanya karena saya ingin menunjukkan perbedaannya setelah dan sebelum menerapkan bantuan ini.

  1. Sekarang, buka aplikasi kedua yaitu Attack_Application. Lalu, buka metode Registrasi Pengontrol Akun. Cukup ubah metode POST dengan yang sederhana, seperti ditunjukkan di bawah ini.

    Formulir pendaftaran
    1. @ Html.LabelFor (m => m.UserName) @ Html.TextBoxFor (m => m.UserName)
    2. @ Html.LabelFor (m => m.Password) @ Html.PasswordFor (m => m.Password)
    3. @ Html.LabelFor (m => m.ConfirmPassword) @ Html.PasswordFor (m => m.ConfirmPassword)

7. Sekarang, misalkan Anda adalah seorang hacker dan Anda tahu URL dari mana Anda dapat mendaftarkan pengguna di aplikasi CrossSite_RequestForgery. Sekarang, Anda membuat situs Pemalsuan sebagai Attacker_Application dan hanya memasukkan URL yang sama dalam metode posting.

8. Jalankan aplikasi ini sekarang dan isi kolom register dan klik register. Anda akan melihat Anda terdaftar di aplikasi CrossSite_RequestForgery. Jika Anda memeriksa database aplikasi CrossSite_RequestForgery maka Anda akan melihat dan entri yang telah Anda masukkan.

  1. Penting - Sekarang, buka aplikasi CrossSite_RequestForgery dan komentari token di Account Controller dan daftarkan View. Coba daftar lagi dengan proses yang sama. Kemudian, kesalahan akan terjadi seperti di bawah ini.

Kesalahan Server dalam Aplikasi '/'. ________________________________________ Cookie anti-pemalsuan yang diperlukan "__RequestVerificationToken" tidak ada.

Inilah yang dikatakan konsep itu. Apa yang kami tambahkan dalam tampilan yaitu @ Html.AntiForgeryToken () menghasilkan __RequestVerificationToken pada waktu buka dan [ValidateAntiForgeryToken] tersedia dengan metode Controller. Cocokkan token ini pada waktu posting. Jika tokennya sama, maka artinya ini adalah permintaan yang valid.

Vinayak Savale
sumber
3
disalin dari c-sharpcorner.com/article/…
Mohammed Dawood Ansari