Lindungi dari serangan CSRF di Formulir Web ASP.NET tanpa Halaman Master

Saya sedang meninjau keamanan situs web ASP.NET yang berusia sekitar 7 tahun. Pada saat situs dibuat, panduan Microsoft adalah menambahkan yang berikut ini ke Halaman Dasar umum (diwarisi oleh semua kode di belakang halaman):

Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
    MyBase.OnInit(e)

    If Request.IsSecureConnection = True Then
        ViewStateUserKey = Session.SessionID
    End If
End Sub

Saran ini berasal dari Artikel MSDN berikut dari 2005.

Pertanyaan saya adalah apakah ini masih merupakan teknik yang valid dan efektif untuk melindungi terhadap serangan CSRF.

Catatan, saya membaca pertanyaan SO tentang topik ini, tetapi tampaknya perlindungan otomatis proyek Visual Studio 2012+ untuk CSRF ditambahkan ke Halaman Master. Situs yang saya ulas tidak menggunakan Halaman Master karena konflik CSS, dan tidak termasuk dalam cakupan untuk menambahkan Halaman Master ke dalam pembaruan saat ini.


person Josh    schedule 26.06.2016    source sumber
comment
Bagaimana fungsi di atas mencegah CSRF?   -  person Legends    schedule 27.06.2016


Jawaban (1)


Ya, ini akan mengurangi CSRF jika ViewStateMac diaktifkan.

Hal ini karena setiap pengguna akan memiliki ViewState yang diautentikasi dengan kunci mereka sendiri (yang merupakan ID sesi).

Saat ViewState dikirim kembali ke server pada setiap permintaan yang memiliki efek samping, ASP.NET akan memvalidasi bahwa nilai ViewState sebenarnya berasal dari pengguna saat ini.

Oleh karena itu penyerang mana pun tidak dapat membuat permintaan POST untuk membujuk korbannya agar mengirimkan karena mereka tidak memiliki ID sesi korban untuk melakukan hal ini.

Perhatikan bahwa hal di atas mengasumsikan bahwa semua permintaan yang memiliki efek samping dilakukan melalui postback. Artinya, aplikasi mengikuti RFC 7231 sehubungan dengan definisi "aman" metode dan tidak ada penangan lain untuk permintaan POST selain mekanisme postback.

Perhatikan bahwa permintaan AJAX khusus apa pun dalam aplikasi, seperti yang dibuat oleh JQuery tidak akan dilindungi dari CSRF karena permintaan ini tidak diimplementasikan sebagai postback.

Disarankan untuk menyetel dan memeriksa header khusus, seperti X-Requested-With. Perhatikan bahwa karena berbagai kerentanan Flash, Anda mungkin juga ingin meneruskan token ke header untuk memeriksa sisi server.

person SilverlightFox    schedule 27.06.2016