Saya harus menggunakan AntiForgeryToken dalam segala bentuk, bahkan login dan pendaftaran?

I'm berjalan agak besar situs dengan ribuan kunjungan setiap hari, dan yang agak besar userbase. Sejak saya mulai bermigrasi ke MVC 3, I've telah menempatkan AntiForgeryToken dalam beberapa bentuk, yaitu mengubah data yang dilindungi dll.

Beberapa bentuk-bentuk lain, seperti login dan pendaftaran juga menggunakan AntiForgeryToken sekarang, tapi aku'm menjadi meragukan tentang mereka butuhkan ada di tempat pertama, untuk beberapa alasan...

Form login membutuhkan poster untuk mengetahui kredensial yang benar. Saya dapat't benar-benar memikirkan cara apapun yang CSRF attack akan mendapat manfaat di sini, terutama jika aku memeriksa bahwa permintaan berasal dari host yang sama (memeriksa Referer header).

Yang AntiForgeryToken token menghasilkan nilai yang berbeda setiap waktu halaman dimuat. Jika saya memiliki dua tab yang terbuka dengan halaman login, dan kemudian mencoba untuk mengirim mereka, yang pertama akan berhasil di-load. Kedua akan gagal dengan AntiForgeryTokenException (beban pertama kedua halaman, kemudian mencoba untuk mengirim mereka). Dengan lebih aman halaman - ini jelas-jelas merupakan kejahatan yang diperlukan, dengan halaman login - sepertinya berlebihan, dan hanya meminta masalah.

Ada mungkin alasan lain mengapa seseorang harus menggunakan atau tidak menggunakan token yang bentuk. Aku benar dalam asumsi yang menggunakan token di setiap posting bentuk berlebihan, dan jika demikian - seperti apa bentuk yang akan mendapat manfaat dari itu, dan yang pasti akan tidak manfaat?

P. S. pertanyaan Ini juga bertanya di StackOverflow, tapi aku'm tidak sepenuhnya yakin. Saya pikir saya'd tanyakan di sini, untuk lebih lanjut keamanan cakupan

Mengomentari pertanyaan (3)
Larutan

Ya, itu adalah penting untuk memiliki anti-pemalsuan token untuk login halaman.

Mengapa? Karena potensi untuk "login CSRF" serangan. Di login CSRF attack, penyerang log korban ke situs target dengan penyerang's akun. Pertimbangkan, misalnya, serangan pada Alice, yang merupakan pengguna Paypal, oleh kejahatan penyerang Evelyn. Jika Paypal didn't melindungi halaman login dari serangan CSRF (misalnya, dengan anti-pemalsuan tanda), maka penyerang dapat diam-diam log Alice's browser ke Evelyn's account di Paypal. Alice akan dibawa ke Paypal situs web, dan Alice masuk, tapi masuk sebagai Evelyn. Misalkan Alice kemudian klik pada halaman untuk link nya kartu kredit untuk dia akun Paypal, dan memasuki tubuhnya nomor kartu kredit. Alice berpikir dia adalah menghubungkan kartu kredit ke dia akun Paypal, tapi sebenarnya dia telah dikaitkan itu untuk Evelyn's akun. Sekarang Evelyn dapat membeli barang-barang, dan itu dibebankan kepada Alice's kartu kredit. Oops. Ini adalah halus dan sedikit tidak jelas, tapi cukup serius yang harus anda termasuk anti-pemalsuan token untuk bentuk tindakan target yang digunakan untuk log in. Lihat kertas untuk rincian lebih lanjut dan beberapa contoh-contoh nyata seperti kerentanan.

Ketika itu OK untuk meninggalkan off anti-pemalsuan token? Secara umum, jika target URL, dan mengakses URL tersebut tidak memiliki efek samping, maka anda don't harus mencakup anti-pemalsuan tanda di URL tersebut.

Kasar aturan praktis adalah: mencakup anti-pemalsuan tanda di semua POS permintaan, tapi anda don't perlu untuk MENDAPATKAN permintaan. Namun, ini kasar aturan praktis adalah sangat mentah pendekatan. Hal ini membuat asumsi bahwa MENDAPATKAN permintaan akan efek samping-gratis. Dalam sebuah dirancang dengan baik aplikasi web, yang diharapkan harus terjadi, tetapi dalam prakteknya, kadang-kadang aplikasi web desainer don't mengikuti pedoman dan menerapkan MENDAPATKAN penangan yang memiliki efek samping (ini adalah ide yang buruk, tapi itu's tidak biasa). Yang's mengapa saya sarankan pedoman didasarkan pada apakah permintaan akan memiliki efek samping bagi negara dari aplikasi web atau tidak, bukan berdasarkan DAPATKAN vs POSTING.

Komentar (10)

Di mana itu bisa menjadi perlu untuk memiliki token pada halaman login adalah ketika anda perlu untuk mencegah seseorang dari jahat masuk ke situs tertentu dengan kredensial. Aku bisa melihat ini menjadi kasus jika seseorang sedang dijebak untuk sesuatu yang membutuhkan login dengan particlar pengguna. Dengan itu dikatakan, sedikit dari contoh yang dibuat-buat.

Komentar (1)