Ben CSRF saldırıları azaltmak amacıyla bir ıhttpmodule uygulamak. GET'lerde asp.net SessionID ile yanıt olarak gizli bir form parametresi html enjekte eder. POSTlarda, gizli parametre değerinin mevcut SessionID ile eşleştiğinden emin olmak için kontrol eder. Bildiğim kadarıyla, SessionID değerini elde etmenin tek yolu, kötü amaçlı site tarafından okunamayan veya belirlenemeyen çerezlerden. Baktığım bir şey var mı?CSRF Doğrulama Jetonu: oturum kimliği güvenli mi? asp.net olarak
cevap
Bu yaklaşım doğrudur. Bir GET işlemi üzerinden kullanılabilen tüm eylemlerin "güvenli" olduğundan emin olmalısınız (bu da en iyi uygulamadır), çünkü XSRF korumanızı yalnızca POST'lara uyguladığınızdan. Ekstra sigortası için
, siz (tüm bağlantıların için bir URL parametresi ekleyerek ve her GET isteği bunun için kontrol ederek) çok onu alır üzerinde kullanabilirsiniz, ancak bu hantal bu.
ekstra paranoyak iseniz, alternatif kimlik için farklı rasgele sayı seçebilirsiniz. Bu, bir tarayıcı yanlış bir şekilde oturum çerezinizi başka bir sitede bulunan bazı Javascript'lere erişilebilir hale getirse bile sizi koruyacaktır. Bir oturum oluşturulduğunda, başka bir büyük rastgele sayı seçin ve oturumunuzda saklayın. Form öğe adı rastgele ayrılması
İdeal oturum kimliği dışında bir şey kullanmak isteyeyim, ama temelde o kadar. OWASP, kullanıcının oturumunda saklanan rastgele bir form öğesi adı kullanılmasını önerir. Bu şekilde bir saldırgan doğru gizli alanı bile oluşturamaz.
ilginç bir fikir. Bağlantı için teşekkürler. – ironsam
geçerli (ama tabii ki mümkün) olmadığından onlarla durumunu değiştirme http şimdilik GETler hakkında muhtemelen endişe olmaz. Sözleşmeyi/standardı koruduğumuz sürece, iyi olmalıyız. Söylediğiniz gibi ekstra güvenlik için SessionID'den başka bir değer kullanmayı düşünebilirim - teşekkürler. – ironsam