it-swarm-tr.com

AntiForgeryToken'i giriş ve kayıt olmak üzere tüm formlarda mı kullanmalıyım?

Her gün binlerce ziyareti olan oldukça büyük bir site ve oldukça büyük bir kullanıcı tabanı işletiyorum. MVC 3'e geçmeye başladığımdan beri, AntiForgeryToken'i korumalı verileri değiştiren bir dizi forma koyuyorum.

Giriş ve kayıt gibi diğer bazı formlar da şimdi AntiForgeryToken kullanıyor, ancak birkaç nedenden ötürü orada ihtiyaçları konusunda şüpheli hale geliyorum ...

Giriş formu, posterin doğru kimlik bilgilerini bilmesini gerektirir. Özellikle bir CSRF saldırısının burada fayda sağlayacağını gerçekten düşünemiyorum, özellikle de isteğin aynı Ana Bilgisayardan geldiğini kontrol edersem (Yönlendirme başlığını kontrol eder).

AntiForgeryToken belirteci, sayfa her yüklendiğinde farklı değerler üretir. Giriş sayfasıyla açık iki sekmem varsa ve bunları göndermeye çalışırsam, ilk sekme başarıyla yüklenir. İkincisi bir AntiForgeryTokenException ile başarısız olur (önce her iki sayfayı da yükleyin, sonra bunları göndermeyi deneyin). Daha güvenli sayfalarla - bu, giriş sayfaları ile açıkça gerekli bir kötülüktür - aşırı doldurulmuş gibi görünüyor ve sadece sorun istiyor.

Birinin jetonu formlarda kullanması veya kullanmaması için başka nedenler de olabilir. Simgeyi her yazı formunda kullanmanın aşırı olduğunu ve doğru ise ne tür formlardan faydalanacağını ve hangilerinin kesinlikle değil fayda sağlayacağını varsayarak doğru muyum?

Not; Bu soru ayrıca sorulur StackOverflow, ama ben tamamen ikna değilim. Ben burada daha fazla güvenlik kapsama isteyeceğini düşündüm

82
Artiom Chilaru

Evet, giriş sayfaları için sahtecilikle mücadele jetonları eklemek önemlidir.

Neden? "Giriş CSRF" saldırı potansiyeli nedeniyle. Bir giriş CSRF saldırısında, saldırgan saldırganın hesabıyla kurbanı hedef siteye kaydeder. Örneğin, Paypal kullanıcısı olan Alice'e kötü bir saldırgan Evelyn tarafından yapılan bir saldırıyı düşünün. Paypal giriş sayfalarını CSRF saldırılarına karşı korumazsa (ör. Sahtecilikle mücadele jetonu ile), saldırgan Alice'in tarayıcısını sessizce Evelyn'in Paypal'daki hesabına giriş yapabilir. Alice Paypal web sitesine yönlendirilir ve Alice giriş yapar, ancak Evelyn olarak giriş yapar. Daha sonra Alice'in kredi kartını Paypal hesabına bağlamak için sayfayı tıkladığını ve kredi kartı numarasını girdiğini varsayalım. Alice, kredi kartını Paypal hesabına bağladığını düşünüyor, ancak aslında bunu Evelyn'in hesabına bağladı. Şimdi Evelyn bir şeyler satın alabilir ve Alice'in kredi kartından tahsil ettirebilir. Hata. Bu ince ve biraz belirsiz, ancak oturum açmak için kullanılan form eylem hedefi için sahtecilikle mücadele jetonları eklemeniz gerektiği kadar ciddidir. Daha fazla ayrıntı ve bunun gerçek dünyadaki bazı örnekleri için bkz. bu makale açıkları.

Sahtecilikle mücadele jetonunu bırakmak ne zaman uygun olur? Genel olarak, hedef bir URL ise ve bu URL'ye erişmenin herhangi bir yan etkisi yoksa, o URL'ye sahtecilikle mücadele belirteci eklemenize gerek yoktur.

Kaba kural: tüm POST isteklerine sahtecilikle mücadele jetonu eklemektir, ancak GET istekleri için buna ihtiyacınız yoktur.Ancak, bu kaba kural çok kaba bir yaklaşımdır. GET isteklerinin tümünün yan etkisi olmayacağı varsayımına varır. İyi tasarlanmış bir web uygulamasında, umarım böyle olması gerekir, ancak pratikte, bazen web uygulaması tasarımcıları bu kılavuzu izlemez ve GET işleyicilerini uygulamaz yan etkisi olan (bu kötü bir fikir, ancak nadir değildir) Bu yüzden isteğin web uygulamasının durumuna bir yan etkisi olup olmayacağına dayalı olarak, GET vs'ye dayanmak yerine bir rehber öneriyorum. İLETİ.

72
D.W.

Jetonun bir giriş sayfasında bulunmasının gerekli olabileceği yer, birisinin sizi kötü amaçlı olarak belirli kimlik bilgileriyle siteye girmesini önlemeniz gerektiğidir. Birisi bir partikül kullanıcı ile giriş gerektiren bir şey için çerçeveli olup olmadığını bu durumda görebilirsiniz. Bununla birlikte, biraz tartışmalı bir örnek.

2
Steve