Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 5685|Svare: 2

[Kilde] ASP.NET Kjerne (20) Forhindre åpne omdirigeringsangrep

[Kopier lenke]
Publisert på 06.06.2023 21:55:38 | | | |
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)





Foregående:Docker bygger bilder oppå Windows-systemer
Neste:[Turn] (MSSQL) SQL Server-database int og guide for sammenligning av primærnøkkel
 Vert| Publisert på 06.06.2023 21:57:12 |
ASP.NET Core (nitten) bruker BackgroundService for å kjøre bakgrunnsoppgaver
https://www.itsvse.com/thread-10591-1-1.html

ASP.NET Core (18) Tilpass en enkel OutputCache-utdatacache
https://www.itsvse.com/thread-10583-1-1.html

ASP.NET Core (17) integrerer MiniProfile-applikasjonsytelsesanalyse
https://www.itsvse.com/thread-10571-1-1.html

ASP.NET Kjerne (16) Avhengig av tilførsel av dynamiske registreringstjenester
https://www.itsvse.com/thread-10560-1-1.html

ASP.NET Core (XV) bruker HttpClient for å sende HTTP-forespørsler
https://www.itsvse.com/thread-10311-1-1.html

ASP.NET Core (fjorten) er basert på SkiaSharp-bildecaptchaen
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII) for å avgjøre om det er en Ajax-forespørsel eller ikke
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (tolv) front-end JS, CSS-pakking og komprimering
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Core (XI) endepunktruten legger til mellomvare for å vise alle DI-tjenester
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Detaljert forklaring av konfigurasjonsprioriteringer i Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Detaljert forklaring av mellomvare-mellomvaren i Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET gropen med standardparameterne i Swagger-grensesnittet i Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Kjerne (7) Grundig analyse av rammeverkets kildekode
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI henter manuelt metoden for å injisere objekter
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (fem) er basert på CAP-distribuerte transaksjoner
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(4)-filteret enhetlig ModelState-modellvalidering
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) Opprett instanser dynamisk ved hjelp av ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Core (2) Start applikasjonen på nytt via kode
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) bruker Redis-caching
https://www.itsvse.com/thread-9393-1-1.html
 Vert| Publisert på 06.06.2023 22:01:21 |
IsLocalUrl-metoden porteres til .NET-rammeverket som følger:

Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com