Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 5685|Odpowiedź: 2

[Źródło] ASP.NET Rdzeń (20) Zapobieganie otwartym atakom przekierowaniowym

[Skopiuj link]
Opublikowano 06.06.2023 21:55:38 | | | |
Wymagania: Niedawno przeczytałem dokument Microsoftu ASP.NET Core "Preventing Open Redirect Attacks in ASP.NET Core", co mniej więcej oznaczaDeweloperzy powinni zwracać uwagę na trasę lokalnej strony podczas przechodzenia na adres callback, aby zapobiec nieuczciwemu fałszowaniu adresu callback w celu ataków phishingowych。 Przeanalizuj kod i przygotuj się do przeniesienia go do projektu ASP.NET MVC.

Pamiętam, że duży producent miał wcześniej taką lukę i niektórzy używali jej do odprowadzania ruchu z QQ i WeChat, w następujący sposób:



Wykorzystując tę lukę, niektóre narzędzia czatu nie były w stanie powstrzymać użytkowników przed klikaniem w linki w celu dostępu do złośliwych treści stron internetowych ze względu na zaufanie do domen dużych firm.

Czym jest otwarty atak przekierowany?

Aplikacje internetowe często przekierowują użytkowników na strony logowania, gdy uzyskują dostęp do zasobów wymagających uwierzytelnienia. Przekierowania zazwyczaj zawierają parametr querystring returnUrl, dzięki czemu użytkownicy mogą wrócić do pierwotnie żądanego adresu URL po pomyślnym zalogowaniu. Po uwierzytelnieniu użytkownik jest przekierowywany do pierwotnie żądanego adresu URL.

Przykład ataku

Złośliwy użytkownik może opracować atak mający na celu zapewnienie mu dostępu do danych uwierzytelniających lub wrażliwych informacji. Aby rozpocząć atak, złośliwy użytkownik oszukałby go, by kliknął link do strony docelowej Twojej witryny i dodał do tego adresu wartość querystring returnUrl. abycontoso.comNa przykład aplikacja jest whttp://contoso.com/Account/LogOn?returnUrl=/Home/AboutZawiera stronę docelową. Atak przebiega zgodnie z następującymi krokami:

  • Użytkownik klika w złośliwy link dohttp://contoso.com/Account/LogOn?returnUrl=http://contoso1.com/Account/LogOn(Drugi adres URL to "contoso1.com", zamiast "contoso.com”) 。
  • Użytkownik pomyślnie się loguje.
  • Użytkownik zostaje przekierowany na stronęhttp://contoso1.com/Account/LogOn(Złośliwa strona, która wygląda dokładnie jak ta prawdziwa).
  • Użytkownik loguje się ponownie (podając dane uwierzytelniające do złośliwej strony) i zostaje przekierowany z powrotem na prawdziwą stronę.
  • Użytkownicy mogą myśleć, że pierwsza próba logowania się nie powiodła, a druga zakończyła się sukcesem.Prawdopodobnie użytkownicy nadal nie wiedzą, że ich dane uwierzytelniające zostały naruszone




Oprócz stron docelowych, niektóre serwisy oferują strony przekierowujące lub endpointy. Załóżmy, że Twoja aplikacja ma stronę z otwartym przekierowaniem, /Home/Redirect. Na przykład atakujący może utworzyć punkt w e-mailu[yoursite]/Home/Redirect?url=http://phishingsite.com/Home/Loginłącze. Zwykli użytkownicy zauważą, że adres URL zaczyna się od nazwy Twojej strony. Z zaufania klikają w link. Otwieraj przekierowania, a następnie kieruj użytkowników na strony phishingowe, które wyglądają identycznie jak Twoje, a użytkownicy mogą logować się na strony, które uważają za Twoje.

Zapobieganie otwartym atakom przekierowaniowym

Podczas tworzenia aplikacji webowych wszystkie dane dostarczane przez użytkowników są traktowane jako niewiarygodne. Jeśli Twoja aplikacja ma możliwość przekierowywania użytkowników na podstawie treści URL, upewnij się, że takie przekierowania są wykonywane tylko lokalnie w aplikacji (lub przekierowują do znanych URL, a nie do tych, które mogą być podane w ciągu zapytania).

LocalRedirect

Używając metody pomocniczej kontrolera w klasie bazowej LocalRedirect:

Jeśli podano adres URL nielokalny, LocalRedirect wyrzuca wyjątek. W przeciwnym razie zachowuje się tak samo jak metoda przekierowania. Informacje o wyjątku są następujące:

InvalidOperationException: The supplied URL is not local. A URL with an absolute path is considered local if it does not have a host/authority part. URLs using virtual paths ('~/') are also local.
Kod źródłowy przedstawia się następująco:



Proces wykonania: LocalRedirect -> LocalRedirectResult -> IActionResultExecutor<LocalRedirectResult> -> LocalRedirectResultExecutor -> UrlHelper -> IsLocalUrl -> CheckIsLocalUrl, a ostatecznie IsLocalUrl zostanie wywołany do oceny (UrlHelperFactory domyślnie implementuje interfejs IUrlHelperFactory. )。

Adres kodu źródłowego:Logowanie do linku jest widoczne.

IsLocalUrl

IsLocalUrl przed przekierowaniem sprawdź adres URL tą metodą:

Kod jest następujący:

Kod testu jest następujący:



Jeśli możesz przejść na inne strony z nazwami domen, możesz zaimplementować interfejs IUrlHelperFactory i zmodyfikować IServiceCollection, aby zastąpić domyślną klasę implementacji podczas uruchamiania programu.

Odniesienie:Logowanie do linku jest widoczne.

(Koniec)





Poprzedni:Docker buduje obrazy na systemach Windows
Następny:[Obrót] (MSSQL) SQL Server database int and guid do porównania kluczy głównych
 Ziemianin| Opublikowano 06.06.2023 21:57:12 |
ASP.NET Core (dziewiętnaście) wykorzystuje BackgroundService do wykonywania zadań w tle
https://www.itsvse.com/thread-10591-1-1.html

ASP.NET Core (18) Dostosowanie prostej pamięci wyjściowej OutputCache
https://www.itsvse.com/thread-10583-1-1.html

ASP.NET Core (17) integruje analizę wydajności aplikacji MiniProfile
https://www.itsvse.com/thread-10571-1-1.html

ASP.NET Rdzeń (16) Zależny od wstrzykiwania dynamicznych usług rejestracyjnych
https://www.itsvse.com/thread-10560-1-1.html

ASP.NET Core (XV) używa HttpClient do wysyłania żądań HTTP
https://www.itsvse.com/thread-10311-1-1.html

ASP.NET Core (czternaście) opiera się na captcha obrazu SkiaSharp
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII), aby określić, czy jest to żądanie Ajax, czy nie
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (dwanaście) front-end JS, bundling CSS i kompresja
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Core (XI) trasa końcowa dodaje oprogramowanie pośrednicze do wyświetlania wszystkich usług DI
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Szczegółowe wyjaśnienie priorytetów konfiguracji w Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Szczegółowe wyjaśnienie middleware Middleware w Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET domyślnych parametrów interfejsu Swagger w Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Rdzeń (7) Dogłębna analiza kodu źródłowego frameworka
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI ręcznie uzyskuje metodę wstrzykiwania obiektów
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (pięć) opiera się na rozproszonych transakcjach CAP
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Filtr Core(4) zunifikowany walidacja modelu modelu ModelState
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Rdzeń (iii) Dynamicznie twórz instancje za pomocą ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Rdzeń (2) Restart aplikacji za pomocą kodu
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) korzysta z buforowania Redis
https://www.itsvse.com/thread-9393-1-1.html
 Ziemianin| Opublikowano 06.06.2023 22:01:21 |
Metoda IsLocalUrl jest portowana na framework .NET w następujący sposób:

Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com