Asp.Net Mvc CSRF Koruması ?
-
Asp.net mvc de kullanıcıya veri girişi yada güncelleme tarzı birşey yaptırdığım zaman ilgili view içerisinde formun içine @Html.AntiForgeryToken() yazıyorum.Sonra formun post edileceği action methoda da [ValidateAntiForgeryToken] Attribute unu ekliyorum.
Buna ek olarak ilgili action method içinde Request.UrlReferrer diyerek referrer kontrolu yapayım mı? Yada bu referrer kontrolunu bir attribute içinden yaparım istediğim action methodların tepesine o attribute u yazarım. Ama bu kontrole gerek var mı yok mu? Yada csrf dısında nerelerde bu referrer kontrolunu yaparız?
-
CSRF koruması için [ValidateAntiForgeryToken] yeterli diye biliyorum ben. Yabancı kaynaklarda da bu şekilde okumuştum.
-
Peki bu referrer kontrolunu nerelerde yapmak lazım hocam o konuda bi fikrin var mı?
-
Hocam neden böyle bir koruma yöntemine gerek duydun?
-
Şimdi kullanıcı diyelimki zararlı bir siteye girdi. Aynı zamanda bizim sitedede oturum açık. Zararlı sitede javascript koduyla kullanıcıya benim sitemdeki bir form doldurtulabilir.Bunu önüne geçmek için asp.net mvc de AntiForgeryToken() muhabbetini kullanıyoruz. CSRF saldırısı diye geçiyor.Bazı yerlerde sadece referrer kontrolu yapmayın mutlaka token falanda ekleyin demişler.Bense sadece token eklıyorum referrer falan kullanmadım hıc.Ondan acaba dedim referrer kontrolunu nerelerde kullanırız.CSRF için kullanmaya gerek var mıdır..
-
Hannibal_King bunu yazdı
Şimdi kullanıcı diyelimki zararlı bir siteye girdi. Aynı zamanda bizim sitedede oturum açık. Zararlı sitede javascript koduyla kullanıcıya benim sitemdeki bir form doldurtulabilir.Bunu önüne geçmek için asp.net mvc de AntiForgeryToken() muhabbetini kullanıyoruz. CSRF saldırısı diye geçiyor.Bazı yerlerde sadece referrer kontrolu yapmayın mutlaka token falanda ekleyin demişler.Bense sadece token eklıyorum referrer falan kullanmadım hıc.Ondan acaba dedim referrer kontrolunu nerelerde kullanırız.CSRF için kullanmaya gerek var mıdır..
Cross-domin call'leri browser hali hazırda engellemiyor mu?
-
Hannibal_King bunu yazdı
Şimdi kullanıcı diyelimki zararlı bir siteye girdi. Aynı zamanda bizim sitedede oturum açık. Zararlı sitede javascript koduyla kullanıcıya benim sitemdeki bir form doldurtulabilir.Bunu önüne geçmek için asp.net mvc de AntiForgeryToken() muhabbetini kullanıyoruz. CSRF saldırısı diye geçiyor.Bazı yerlerde sadece referrer kontrolu yapmayın mutlaka token falanda ekleyin demişler.Bense sadece token eklıyorum referrer falan kullanmadım hıc.Ondan acaba dedim referrer kontrolunu nerelerde kullanırız.CSRF için kullanmaya gerek var mıdır..
Bilmedigimden soruyorum same origin policy zaten bu gorevi yapmıyor mu :/ ben olayi yanlis mi.anlamisim
-
0x656e bunu yazdıHannibal_King bunu yazdı
Şimdi kullanıcı diyelimki zararlı bir siteye girdi. Aynı zamanda bizim sitedede oturum açık. Zararlı sitede javascript koduyla kullanıcıya benim sitemdeki bir form doldurtulabilir.Bunu önüne geçmek için asp.net mvc de AntiForgeryToken() muhabbetini kullanıyoruz. CSRF saldırısı diye geçiyor.Bazı yerlerde sadece referrer kontrolu yapmayın mutlaka token falanda ekleyin demişler.Bense sadece token eklıyorum referrer falan kullanmadım hıc.Ondan acaba dedim referrer kontrolunu nerelerde kullanırız.CSRF için kullanmaya gerek var mıdır..
Bilmedigimden soruyorum same origin policy zaten bu gorevi yapmıyor mu :/ ben olayi yanlis mi.anlamisim
Hocam bende aynı şeye takıldım o yüzden sordum. CSRF'i koymak için tek geçerli neden adamların direk olarak servislerime request yapmaması olabilir (bot vs. için).
-
https://webuygulamaguvenligi.wordpress.com/2010/05/30/14-csrf-cross-site-request-furgery/
http://security.stackexchange.com/questions/81194/uses-of-same-origin-policy/81331#81331
Burda bişeyler yazmışlar son linktede "The SOP does not stop a cross-domain AJAX request " falan yazmış eleman tek başına çözüm olmadığını söylüyorlar sanırım.Hani veri okuyamaz yani isteği yapar ama cevabı göremez demişler bide.
owasp dada hem referrer bakın hemde işte bu token muhabbetını yapın demısler. Bende referrer ı ondan sordum işte. Yani bence token kullanmaya kesinlikle ihtiyaç var hocalar.Ama referrer konusunda kararsız kaldım.
-
Referer kontrolu güçlü bir yöntem değil. Bazı kullancılar gizlilik sebeblerine göre referer header kapatıyorlar.
Eğer sitende bir çok forum varsa,Salt kullanarak böyle bir şey yapa bilirsin :
Html.AntiForgeryToken("herHangiBirAttributeAdi")
ve action methoda
[ValidateAntiForgeryToken(Salt="herHangiBirAttributeAdi")]
Bu yöntem ile eğer token korumasını keçildiyse diğer Salt değeri her forumda farklı atandığı için tahmin edmiyecekdir.
Bundan başqa XSS karşı önlem mutlaka al, eğer XSS açığın varsa zaten kullanıcının anti-forgery-token okuna bilecek.
Başka bir yöntem, her kullanıcı için formda birer 'şifre' oluştur bunun için GUID() kullana ve ya her hangi method yazıb random şifre oluştura bilirsin. Şifreni hidden field olarak view de tanımla ve kullanıcının session ve ya cookie da kayd edib ordan okuya bilirsin.
Çalışdığım şirketde biz sadece AntiForgeryToken kullanıyoruz sadece proje internal çalışacağı için rahatsız.
türkçem iyi olmaya bilir kusura bakma.
-
https://msdn.microsoft.com/en-us/library/dd492767(v=vs.118).aspx burdaki linkte AntiForgeryToken metodunun salt değer alan override larına obsolete demişler.Eskimiş değil mi?
XSS içinde kullanıcıdan veri alırken zaten mvc default olarak tehlikeli karakterleri engellemiyor mu? Ekstra olarak neler yapıyorsunuz hocam XSS için?