Krav: Jeg har for nylig læst Microsofts ASP.NET Core-dokument "Preventing Open Redirect Attacks in ASP.NET Core", som omtrent betyderUdviklere bør være opmærksomme på den lokale sits rute, når de hopper til callback-adressen, for at forhindre, at nogle personer ondsindet forfalsker callback-adressen til phishing-angreb。 Studér koden og forbered dig på at porte den til ASP.NET MVC-projektet.
Jeg husker, at en stor producent tidligere havde denne sårbarhed, og nogle brugte den til at dræne trafik fra QQ og WeChat, som følger:
Ved at udnytte sårbarheden kunne nogle chatværktøjer ikke forhindre brugere i at klikke på links for at få adgang til ondsindet indhold på hjemmesiden på grund af deres tillid til store virksomheders domæner.
Hvad er et åbent omdirigeringsangreb?
Webapplikationer omdirigerer ofte brugere til login-sider, når de får adgang til ressourcer, der kræver autentificering. Omdirigeringer inkluderer typisk en returnUrl-querystring-parameter, så brugere kan vende tilbage til den oprindeligt anmodede URL efter en vellykket login. Efter brugerens autentificering bliver de omdirigeret til den URL, de oprindeligt anmodede om.
Eksempel på et angreb
En ondsindet bruger kan udvikle et angreb, der er designet til at give en ondsindet bruger adgang til brugerens legitimationsoplysninger eller følsomme oplysninger. For at starte et angreb vil en ondsindet bruger narre brugeren til at klikke på et link til din sides landingsside og tilføje returnUrl-querystring-værdien til den URL. for atcontoso.comFor eksempel er appen ihttp://contoso.com/Account/LogOn?returnUrl=/Home/AboutIndeholder en landingsside. Angrebet følger disse trin:
- Brugeren klikker på et ondsindet link tilhttp://contoso.com/Account/LogOn?returnUrl=http://contoso1.com/Account/LogOn(Den anden URL er "contoso1.com", i stedet for "contoso.com”) 。
- Brugeren logger ind med succes.
- Brugeren omdirigeres til sidenhttp://contoso1.com/Account/LogOn(Et ondsindet site, der ligner præcis det rigtige).
- Brugeren logger ind igen (giver legitimationsoplysninger til det ondsindede site) og bliver omdirigeret tilbage til det rigtige site.
- Brugere kan tro, at deres første loginforsøg mislykkedes, og det andet forsøg lykkedes.Det er sandsynligt, at brugerne stadig ikke ved, at deres legitimationsoplysninger er blevet kompromitteret。
Ud over landingssider tilbyder nogle sider omdirigeringssider eller endepunkter. Lad os sige, at din app har en side, der inkluderer en åben omdirigering, /Hjem/Omdirigering. For eksempel kan en angriber oprette et punkt i en e-mail[yoursite]/Home/Redirect?url=http://phishingsite.com/Home/Loginsammenkæde. Almindelige brugere vil se, at URL'en starter med dit webstedsnavn. Af tillid klikker de på linket. Åbne omdirigeringer sender derefter brugere til phishing-sider, der ligner dine, og brugerne kan logge ind på sider, de tror er dine.
Forhindre åbne omdirigeringsangreb
Når webapplikationer udvikles, behandles alle brugerindtastede data som utroværdige. Hvis din app har mulighed for at omdirigere brugere baseret på URL-indhold, skal du sikre, at sådanne omdirigeringer kun sker lokalt i din app (eller omdirigerer til kendte URL'er, ikke URL'er, der måtte være angivet i forespørgselsstrengen).
Lokalomdirigering
Brug af Controller-hjælpermetoden i LocalRedirect-basisklassen:
Hvis en ikke-lokal URL angives, kaster LocalRedirect en undtagelse. Ellers opfører den sig som Redirect-metoden. Undtagelsesoplysningerne er som følger:
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. Kildekoden er som følger:
Eksekveringsproces: LocalRedirect -> LocalRedirectResult -> IActionResultExecutor<LocalRedirectResult> -> LocalRedirectResultExecutor -> UrlHelper -> IsLocalUrl -> CheckIsLocalUrl, og til sidst vil IsLocalUrl blive kaldt til judge (UrlHelperFactory implementerer IUrlHelperFactory-grænsefladen som standard). )。
Kildekodeadresse:Hyperlink-login er synlig.
IsLocalUrl
IsLocalUrl test URL'en ved hjælp af denne metode:
Koden er som følger:
Testkoden er som følger:
Hvis du har lov til at hoppe til andre domænenavnesider, kan du implementere IUrlHelperFactory-grænsefladen og ændre IServiceCollection for at erstatte standardimplementeringsklassen, når programmet starter.
Henvisning:Hyperlink-login er synlig.
(Slut)
|