2015-01-14 15 views
9

Wdrażam aplikację CSRF Anti-Forgery Protection w mojej aplikacji ASP.NET MVC 5. W szczególności odwołuję się do podejścia opisanego przez Mike'a Wassona na temat ASP.NET website, aby chronić metody kontrolerów, które odpowiadają na żądania AJAX, takie jak w kontrolerach WebAPI. To podejście wykorzystuje metodę AntiForgery.GetTokens do generowania żetonów kryptograficznych zapobiegających fałszerstwu na podstawie użytkownika, a następnie AntiForgery.Validate, aby sprawdzić, czy przesłane tokeny należą do bieżącego użytkownika.Czy wygasają żetony antyfirmatorskie ASP.NET MVC CSRF?

Moje pytanie brzmi: czy dla tych tokenów istnieje czas do życia? Czy wygasają, a jeśli tak, to jak długo są one dobre? Dokumentacja jest niemowa w tej sprawie.

Nie chcę zezwalać na nie tracące ważności tokeny w moim systemie. Dodatkowo chcę przekazać klientowi, ile czasu upływa, zanim zażądam nowego tokena. Mogę zaimplementować wygasające żetony, jeśli to konieczne, używając FormsAuthentication.Encrypt; Jeśli jednak wygaśnięcie jest już wbudowane w metody klasy AntiForgery, chciałbym oszczędzić sobie niepotrzebnej złożoności.

+1

chciałbym wiedzieć to zbyt. Spróbuj spojrzeć na kod źródłowy: https://github.com/ASP-NET-MVC/aspnetwebstack/blob/4e40cdef9c8a8226685f95ef03b746bc8322aa92/src/System.Web.WebPages/Helpers/AntiForgery.cs – nmit026

Odpowiedz

3

Chodzi o to, że dwa wrażliwe dokumenty są generowane przez każdy podatny punkt HTTP POST i wysyłane bezpośrednio na serwer. Dlatego po kliknięciu przycisku "Prześlij" w formularzu generowane są dwa tokeny: plik cookie i wartość formularza, oba na podstawie poświadczeń użytkownika, które należy przeczytać tutaj (ładny artykuł w formie pisemnej): http://www.asp.net/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages

token cookie, który faktycznie może wygasnąć, jest zbędny i nie jest konieczny dla systemu, z wyjątkiem przypadku, w którym próbowano uwierzytelnić anonimowo. Na przykład. zobacz tutaj (pierwsza odpowiedź): MVC 2 AntiForgeryToken - Why symmetric encryption + IPrinciple?

Nadal twój inny token nie jest czytelny dla atakujących i te żetony są generowane przy każdym nowym żądaniu. Dlatego nie musisz się martwić o datę wygaśnięcia.

Edit: Właściwie, to wszystko można również przeczytać w sekcji komentarzy artykułu masz na myśli (Mike Wasson);)

+7

Dziękujemy za odpowiedź. Rozumiem koncepcje działania dwóch tokenów i rozumiem subtelne, ale różne podejścia do formularzy HTML w stosunku do żądań AJAX. Moje pytanie dotyczy jednak konkretnie tego, czy tokeny wygasają, co nie jest omawiane w dokumentacji ani w komentarzach do postu Mike'a Wassona. Twoje zdrowie! – kbrimington

+1

@kbrimington [pierwszy artykuł powyżej] (https://docs.microsoft.com/en-us/aspnet/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages) w IAntiForgeryAdditionalDataProvider w dolnej części strony, wydaje się sugerować, że nie ma wygaśnięcia. Mówi, że MOŻESZ wdrożyć dodatkowe sprawdzenia i stwierdza: "Procedura sprawdzania poprawności może zaimplementować limit czasu (poprzez sprawdzenie bieżącego czasu w stosunku do czasu, który był przechowywany podczas tworzenia tokena), procedurę sprawdzania nonce lub dowolną inną pożądaną logikę." Czy kiedykolwiek otrzymałeś ostateczną odpowiedź na temat wygaśnięcia tokena? –

+1

@DavidYates, dziękuję za zwrócenie na to uwagi. Wówczas doszedłem do wniosku, że nie wolno im wygasać, a ja zbudowałem własną logikę wygaśnięcia. Nie przypominam sobie, by ta sekcja była obecna w artykule sprzed 2,5 lat, kiedy zadałam moje pytanie. Wydaje się, że jest to intencją 'IAntiForgeryAdditionalDataProvider', aby umożliwić łatwą personalizację tokenu i jego logikę walidacji, w tym możliwość implementacji limitów czasu. – kbrimington