2011-03-08 17 views
7

Sayfa yenileme olmadan birden çok AJAX form yazı yapan bir sayfa oluşturuyorum.ASP.NET MVC HTML.AntiForgeryToken()

Formu CSRF saldırılarına karşı güven altına almak için ASP.NET MVC HTML.AntiForgeryToken() yardımcı programını kullanmak istiyorum. Sayfadaki her formun aynı belirteci paylaşabileceğini düşünüyorum, ancak aynı belirteçle birden çok istekte bulunmasına izin verecek mi? Eğer değilse, yeni bir jeton almanın ya da formları güvenceye almanın başka bir yolu var mı?

cevap

7

Aynı belirteci paylaşabilirsiniz. Elbette, genel bir kural olarak, Ajax çağrılarınızı CSRF belirtecini isteğe göre birleştiren birleşik bir yöntemle (POST daha güvenli ve çok daha doğru bir mimari perspektiften olsa da GET veya POST olsun) sarmanız önerilir. Ajax'ın yalnızca iş girdisi değerlerine odaklanmanızı sağlaması ve CSRF hakkında endişelenmeniz gerekmez.

Düzenleme: bu güzel Mesaja & örnek okuyun otomatik sarma jQuery 1.5 kullanılarak CSRF koruması için ve yukarı Ajax: http://www.codethinked.com/aspnet-mvc-ajax-csrf-protection-with-jquery-15

1

ben bu makaleleri okumak için önerecektir:

http://msmvps.com/blogs/luisabreu/archive/2009/02/09/the-mvc-platform-the-new-anti-forgery-token.aspx

http://blog.stevensanderson.com/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

Yani soruyu cevaplamak için - bu nasıl yapıyorlar bağlı olacaktır. Jetonu gömmek için AntiForgeryToken'u kullandığınızda, gizli alanın yanı sıra çerezde de (yeni) belirteci oluşturur. Ve CRSF saldırısı, eylem yönteminizi (POST için) ValidateAntiForgeryToken özniteliğiyle işaretlediğiniz sürece bunları karşılaştırarak algılanır. Şimdi, her istek için yeni belirtecin oluşturulması önemli. Böylece AJAX form mesajlarını yaptığınızda, çerez yeni jeton değeriyle ayarlanacak ve AJAX cevabının yeni jeton alanı içerdiğinden ve tarayıcı tarafında güncellediğinizden emin olmalısınız. Daha iyi koruma için farklı formlar için farklı tuzlar kullanmanızı öneririm.