2011-08-25 15 views
7

Basit bir ASP.NET MVC 3 örneği ile varsayılan LogOn formunu değiştirerek hızlı bir test yaptım. this article'a göre, hem gizli alan __RequestVerificationToken hem de __RequestVerificationToken_Lw__ çerezleri Html.AntiForgeryToken() tarafından oluşturulan aynı değeri içermelidir. Ancak, Fiddle'a aldığımda tam olarak aynı değil, MVC 3 kaynak koduna bakarak, GetAntiForgeryTokenAndSetCookie yöntemi çerezleri oluşturmak için tuz değeri kullanmadı. MVC 3'te herhangi bir değişiklik oldu mu?AntiForgeryToken'in gizli alanı neden makinedeki tanımlama bilgileriyle aynı değil?

Hala normal veya Ajax POST isteğiyle başarılı bir şekilde oturum açabileceğimi unuttum. İşte

Fiddle gelen ham günlük geçerli:

POST http://localhost:51713/Account/LogOn HTTP/1.1 
Referer: http://localhost:51713/Account/LogOn 
Content-Length: 256 
Origin: http://localhost:51713 
X-Requested-With: XMLHttpRequest 
Content-Type: application/x-www-form-urlencoded 
Cookie: __RequestVerificationToken_Lw__=OIRtVqUvNt/LfDGeoVy3W1VhdKN7MwdbUZmRNScz4NqS4uV0I0vQH2MHg77SsVhcinK5SJi9mVcdBUWk2VMiPTk8EMUN2Zq0X4ucK8XQ3/zr6NoiIvVF73Bq8ahbFaY/IrNrWY7mmzvO9j/XVLNN2lNqgCd6I3UGZAw3/nlOmpA= 

__RequestVerificationToken=zeDS%2F8MZE%2BLf%2FrRhevwN51J7bOE3GxlGNLQc8HogwFctF7glU1JboHePTTHa5YFe9%2FD2sY7w167q53gqvcwYZG1iZeecdnO4fdg6URdR4RUR%2BjIgk1apkXoxQ2xg48REfv4N5D4SHKU4MAf30Diy0MVyyF9N2Dl7uUGT6LbKHZU%3D&UserName=Tien&Password=tien&RememberMe=false 
+1

Yankı olarak - AntiForgery jetonları, uygulamanızın halka açık olmayan kısımlarında kullanılmak üzere tasarlanmıştır (kullanıcının önceden kimliği doğrulanmışsa). Onları halka açık bir giriş formunda kullanmak oldukça anlamsız. –

+0

LogOn formu test amaçlı kullanıldı. –

cevap

2

onlar aynı olmalıdır ne malum? :) Tabii ki, bir şekilde karşılaştırılabilir olmalılar, ama bu onların serileştirilmiş formunda aynı görünmeleri gerektiği anlamına gelmez. Çereze serileştirilmiş farklı veri kümesi (sadece "tuz" ve belirteci) ve HTML biçimlendirmesi (tuz, simge, oluşturma zamanı, kullanıcı adı). gizli alan karşıtı sahtecilik belirteci asla çünkü detaylar ilgileniyorsanız

, ILSpy alıp System.Web.Mvc.AntiForgeryDataSerializer, System.Web.Mvc.AntiForgeryData ve System.Web.Mvc.ValidateAntiForgeryTokenAttribute

+0

Teşekkürler, bahsi geçen makalenin aynı olduğunu söylediler :) ve isimleri de aynı. –

+0

ILSpy'ye gerek yok, ASP.NET Mvc açık kaynak. http://aspnetwebstack.codeplex.com/SourceControl/latest – haim770

1

Eğer söz konusu başvuran makalede OnAuthorization yönteminde arayın yanlıştır Sahtecilik karşıtı çerez değeriyle aynıdır.

Cevabımın eklenmiş değeri, ASP.NET anti-forgery jetonu iç yapısını tanımlayan link to interesting article'dur. çerez ve form belirteçleri eşleşmesi için

BitConverter.ToString(System.Web.Helpers.AntiXsrf.MachineKey45CryptoSystem.Instance.Unprotect(tokenValue)) 

... ve sonraki adımları: Bu, diğerleri arasında, deşifre ve çerez/form belirteci şifresini çözmek için net adımlar sağlar.

İlgili konular