2011-11-09 29 views
5

MVC3 ve form kimlik doğrulamasına güvenmeyen özel bir kimlik doğrulama yöntemini kullanan bir web sitemiz var - en azından anlatabildiğim kadarıyla. web.config biz Form kimlik doğrulaması olmadan AntiForgeryToken

<authentication mode="None"></authentication> 

kurmak ve hiç kullanmadığımız/kodunda herhangi bir yere HttpContext.User ayarlayın.

if (String.Compare(filterContext.HttpContext.Request.HttpMethod, "post", true) == 0) 
{ 
    var forgery = new ValidateAntiForgeryTokenAttribute(); 
    forgery.OnAuthorization(filterContext); 
} 

geçerli: Bu kod ile OnAuthorization içinde bütün anti-sahtecilik çek merkezileştirme

A required anti-forgery token was not supplied or was invalid 

: @ Html.AntiForgeryToken() kullanarak bazı durumlarda kullanıcı bu hata mesajını aldığında sorunudur istisna nerede oluşur. Uygulama havuzu geri döndüğünde yeni anahtarların oluşturulmasını önlemek için defined a machineKey in web.config var. Bu sorunu çözmedi.

Daha sonra, istemcinin tarayıcısının çerez göndermediğini düşündük. Çerezleri kaydetmeye başladık ve bazı durumlarda RequestVerificationToken_Lw çerezi gönderildiğini, ancak Google Analytics tarafından yapılanlar gibi diğer çerezlerin de iyi bir şekilde gönderilmesine rağmen başkalarının olmadığını fark ettik. Tarayıcıda bir şeyler kurabilmeli ve başkalarını bırakabilir mi?

anti-forgery token depends on forms authentication gibi görünüyor. Bu dava mı? Form kimlik doğrulamasını güvenilir bir şekilde kullanmadığınız zamanlarda AntiForgeryToken kullanmaya devam etmenin herhangi bir yolu. Yukarıda anlattığım yöntemin vakaların% 90'ından fazlasını oluşturduğunu, ancak neden bazı insanlar için işe yaramadığını belirleyemediğimizi unutmayın.

Düşünceler?
Teşekkürler!

+0

Kimlik doğrulama kullanmıyorsanız, sahtekarlık belirtileri neden önemlidir? Bir CSRF saldırısının amacı, bir saldırganın bir sitede kimliği doğrulanmış bir kullanıcının adına hareket etmesini sağlamaktır. Ve bir site kimlik doğrulaması kullanmadığında CSRF amaçsız görünüyor. –

+0

Kimlik doğrulama kullanıyorum, sadece form kimlik doğrulaması kullanmıyorum. – pbz

+0

Ne tür bir kimlik doğrulama kullanıyorsunuz? –

cevap

0

Bazı kullanıcılar bu soruna her zaman sahip mi? Ya da sadece biraz zaman? Ayrıca, TÜM zamanların bazı yöntemleri için çalışır veya aynı eylem yöntemi için tutarsız mı? Ajax çağrılarınız var mı? Varsayılan sahtekarlık belirteci uygulaması AJAX çağrılarını işlemez. Ancak işinize yarayacak bazı özel kodlar yazabilirsiniz

+0

Neden bunun bir cevap olarak değil, bir yorum olarak gösterdiğini bilmiyorum –

+0

Cevabınız için teşekkürler! 1) Bazı kullanıcılar her zaman böyle görünüyor, ancak iletişim kurabildiğim bir kullanıcı teknik olmayan bir şeydi, bu yüzden çok fazla araştırma yapılamadım. Onların IP ve hatalarını günlüğünde görüyorum, bu yüzden yasal olduğunu biliyorum. 2) Bu sayfalarda AJAX yok. Bu sınırlamaların farkındayım ve gerektiğinde çalıştım. – pbz

0

Formdaki antiforma belirtecini ekliyor musunuz? Antiforra jetonu, istemcide gizli bir HTML elemanı aracılığıyla saklanır ve bir çerez olarak saklanmaz. Diğer soru, hangi tarayıcı sürümünü kullanıyorlar? En yeni sürüme yükseltme yapılabilir mi?

@using (Html.BeginForm()) 
    { 
     @Html.AntiForgeryToken()... 
+0

Evet, formun içindeki belirteci ekliyorum. Hangi sürüme sahip olduklarını bilmiyorum, ancak Internet Explorer kullanıyorlar (iletişime geçebildiğim bir kişiye göre). Bu başka insanlara oldu, ama ne yazık ki tarayıcı sürümünü kaydetmedim.Geri dönüp daha fazla veri almak için elimden geldiğince giriş yapmam gerekebilir. Başkalarının bu soruna daha önce gelmesini umuyordum. – pbz

İlgili konular