Krav: Jeg leste nylig Microsofts ASP.NET Core-dokument "Preventing Open Redirect Attacks in ASP.NET Core", som omtrent betyrUtviklere bør være oppmerksomme på veien til det lokale nettstedet når de hopper til callback-adressen for å forhindre at noen ondsinnet forfalsker callback-adressen for phishing-angrep。 Studer koden og forbered deg på å porte den til ASP.NET MVC-prosjektet.
Jeg husker at en stor produsent tidligere hadde denne sårbarheten, og noen brukte den til å tappe trafikk fra QQ og WeChat, som følger:
Ved å utnytte sårbarheten klarte noen chatteverktøy ikke å hindre brukere i å klikke på lenker for å få tilgang til ondsinnet nettstedinnhold på grunn av deres tillit til store selskapers domener.
Hva er et åpent omdirigeringsangrep?
Webapplikasjoner omdirigerer ofte brukere til innloggingssider når de får tilgang til ressurser som krever autentisering. Omdirigeringer inkluderer vanligvis en returnUrl-spørringsparameter slik at brukere kan returnere til den opprinnelig forespurte URL-en etter en vellykket innlogging. Etter at brukeren har autentisert seg, blir de omdirigert til URL-en de opprinnelig ba om.
Eksempel på et angrep
En ondsinnet bruker kan utvikle et angrep designet for å gi en ondsinnet bruker tilgang til brukerens legitimasjon eller sensitiv informasjon. For å starte et angrep vil en ondsinnet bruker lure brukeren til å klikke på en lenke til nettstedets landingsside og legge til returnUrl-spørringsverdien til den URL-en. for å kunnecontoso.comFor eksempel er appen ihttp://contoso.com/Account/LogOn?returnUrl=/Home/AboutInneholder en landingsside. Angrepet følger disse trinnene:
- Brukeren klikker på en ondsinnet lenke for åhttp://contoso.com/Account/LogOn?returnUrl=http://contoso1.com/Account/LogOn(Den andre URL-en er "contoso1.com", i stedet for "contoso.com”) 。
- Brukeren logger inn med suksess.
- Brukeren blir omdirigert til nettstedethttp://contoso1.com/Account/LogOn(Et ondsinnet nettsted som ser nøyaktig ut som det ekte).
- Brukeren logger inn igjen (gir legitimasjon til det ondsinnede nettstedet) og blir omdirigert tilbake til det virkelige nettstedet.
- Brukere kan tro at deres første innloggingsforsøk mislyktes og det andre forsøket lyktes.Det er sannsynlig at brukerne fortsatt ikke vet at legitimasjonen deres er kompromittert。
I tillegg til landingssider tilbyr noen nettsteder omdirigeringssider eller endepunkter. La oss si at appen din har en side som inkluderer en åpen omdirigering, /Home/Redirect. For eksempel kan en angriper opprette et punkt i en e-post[yoursite]/Home/Redirect?url=http://phishingsite.com/Home/Loginlenke. Vanlige brukere vil se at URL-en starter med navnet på nettstedet ditt. Av tillit klikker de på lenken. Åpne omdirigeringer sender deretter brukere til phishing-nettsteder som ser like ut som ditt, og brukere kan logge inn på nettsteder de tror er dine.
Forhindre åpne omdirigeringsangrep
Når man utvikler webapplikasjoner, behandles all data levert av brukeren som upålitelig. Hvis appen din har mulighet til å omdirigere brukere basert på URL-innhold, sørg for at slike omdirigeringer kun gjøres lokalt i appen din (eller omdirigerer til kjente URL-er, ikke URL-er som kan oppgis i spørringsstrengen).
Lokalomdirigering
Ved å bruke Controller-hjelpemetoden i LocalRedirect-baseklassen:
Hvis en ikke-lokal URL er spesifisert, kaster LocalRedirect et unntak. Ellers oppfører den seg på samme måte som Redirect-metoden. Unntaksinformasjonen 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:
Utførelsesprosess: LocalRedirect -> LocalRedirectResult -> IActionResultExecutor<LocalRedirectResult> -> LocalRedirectResultExecutor -> UrlHelper -> IsLocalUrl -> CheckIsLocalUrl, og til slutt vil IsLocalUrl bli kalt til dommer (UrlHelperFactory implementerer IUrlHelperFactory-grensesnittet som standard). )。
Kildekodeadresse:Innloggingen med hyperkoblingen er synlig.
IsLocalUrl
IsLocalUrl før du omdirigerer, test URL-en med denne metoden:
Koden er som følger:
Testkoden er som følger:
Hvis du får lov til å hoppe til andre domenenavnssider, kan du implementere IUrlHelperFactory-grensesnittet og endre IServiceCollection for å erstatte standardimplementeringsklassen når programmet starter.
Referanse:Innloggingen med hyperkoblingen er synlig.
(Slutt)
|