2009-09-10 16 views
16

ASP.NET MVC 1.0'da, çapraz site talebi sahteciliği güvenlik sorununu ele almak için yeni bir özellik var:Anti-sahte jeton tuzunun kullanımı nedir?

 <%= Html.AntiForgeryToken() %> 
[ValidateAntiForgeryToken] 
public ViewResult SubmitUpdate() 
{ 
    // ... etc 
} 

html formunda oluşturulan jetonu yeni bir form oluşturulduğunda her zaman değişmeye devam ettim.

Bu belirtecin nasıl oluşturulduğunu bilmek istiyorum? Ve bu siteyi taramak için bazı yazılımlar kullanıldığında, başka bir güvenlik sorunu rapor edecektir: Oturum düzeltildi. Niye ya? Jetonun değişmesi nedeniyle, bu sorun nasıl ortaya çıkabilir?

Ve antiForgeryToken için "tuz" olan başka bir işlev var, ama gerçekten ne için kullanıldığını biliyorum, hatta belirteç üretmek için "tuz" kullanmıyoruz, sembol her zaman değişecek Peki neden böyle bir işlevi var?

cevap

19

sürü: http://blog.codeville.net/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

Bu xsrf (CSRF) önlemektir. 'Kaydet' seçeneğini bir forma tıklamak ve sunucuda bazı eylemleri gerçekleştirmek, yani kullanıcının bilgilerini kaydetmek için oldukça standart bir davranış. Formu gönderen kullanıcının, olduğunu iddia ettikleri kullanıcı olduğunu nereden biliyorsunuz? Çoğu durumda, bazı çerez veya windows tabanlı kimlik doğrulaması kullanırsınız.

Bir saldırgan sizi küçük bir IFRAME içinde aynı formu gönderen bir siteye götürürse ne olur? Çerezleriniz bozulmadan gönderilir ve sunucu isteği yasal bir talepten farklı görmez. (Gmail'in belirttiği gibi:

Sahteciliğe karşı koruma belirteci, bir sayfa oluşturulduğunda ek bir tanımlama simgesi oluşturarak bu saldırı şeklini engeller. Simge hem formda hem de çerezde, eğer form ve çerez uyuşmuyorsa, bir CSRF saldırısına sahibiz (saldırgan, yukarıda açıklanan saldırıyı kullanarak sahteciliği önleyici jetonu okuyamayacağı için).

Tuz sadece keyfi bir dizedir: Ve ne yaptığını tuz

yukarıdaki makaleden yapın. Farklı bir tuz değeri, farklı bir sahtekarlık jetonunun üretileceği anlamına gelir. Bu, bir saldırganın bir şekilde geçerli bir işaret tutmayı başarsa bile, uygulamanın farklı bir tuz değerinin gerekli olduğu diğer bölümlerinde tekrar kullanamayacağı anlamına gelir.

Güncelleme: Simge nasıl oluşturulur? source'u indirin ve AntiForgeryDataSerializer, AntiForgeryData sınıflarına bir göz atın.

+0

Aslında bütün bunları biliyorum, sorunumu gördün mü? Şimdi blog’dan geliyorum. – MemoryLeak

+0

Hangi sorun "Oturum sabitlendi" veya "tuz" ile ilgili soru? "Oturum sabitlendi" ile aşina değilim, siteyi taramak için ne kullanıyorsunuz? – russau

+0

teşekkürler, russau, ama ben sadece blog yazısına katılmıyorum, sonra buraya bir soru soruyorum .... – MemoryLeak

1

Birkaç olmayan sorunları sormak ettik: Güvenlik yazılımı 'sabit oturumu' bildiriyor neden

  1. Bilmiyorum.
  2. Bu kullanıldığında

(muhtemelen) her istek geçerli olduğunu doğrulamak için: Raporun

  • sahtekarlığa karşı belirteç birlikte gelen belgelere okumaya çalışın. Bu nedenle, birinin ?x=1 numaralı sayfaya bir bağlantı sunmaya çalıştığını düşünün, eğer belirteci de geçmezse, istek reddedilir. Ayrıca, aynı öğenin tekrar gönderilmesini önleyebilir (olabilir). "Denir

    Session["nextToken"] = token; 
    WriteToken(token); 
    
    ... 
    
    if(!Request["nextToken"] == Session["nextToken"]){ 
        ... 
    } 
    
    // note: order in code is slightly different, you must take the token 
    // before regenerating it, obviously 
    

    Bunun için terimi (o korur saldırı) düşünüyorum: Eğer tıklarsanız 'sonrası' iki kez belirteci muhtemelen (her isteği) değişecek ve bu durum böyle bir şey aracılığıyla tespit edilecek CSRF "(Siteler Arası Talep Sahtekarlığı), bu günlerde. Burada AntiForgeryToken üzerindeki bilgi

  • +0

    ama neden biri belirtecin SessionID ile ilgili olduğunu söyledi? – MemoryLeak

    +0

    MemoryLeak: Bilmiyorum, özellikle ASP.NET MVC kullanmamıştım, genelde bir istek belirtecinin amaçlarına cevap veriyorum. Umarım birisi bunu sizin için temizleyebilir. –

    +0

    Eğer haklıysanız, "tuz" ne için kullanılır? Jetonu üretmek için – MemoryLeak

    İlgili konular