Nõuded: Hiljuti lugesin Microsofti ASP.NET Core dokumenti "Avatud ümbersuunamisrünnakute ennetamine ASP.NET Core'is", mis tähendab umbkauduArendajad peaksid jälgima kohaliku saidi trajektoori, kui nad hüppavad tagasikõne aadressile, et vältida mõnel inimesel pahatahtlikult võltsimast callback-aadressi õngitsusrünnakute jaoks。 Õpi koodi ja valmistu selle portimiseks ASP.NET MVC projekti.
Mäletan, et ühel suurel tootjal oli varem selline haavatavus ja mõned inimesed kasutasid seda, et QQ-st ja WeChatist liiklust välja juhtida, järgmiselt:
Haavatavust ära kasutades ei suutnud mõned vestlustööriistad takistada kasutajaid linkidel klõpsamast, et pääseda ligi pahatahtlikule veebilehe sisule, kuna nad usaldasid suuri ettevõtte domeene.
Mis on avatud ümbersuunamise rünnak?
Veebirakendused suunavad kasutajad sageli sisselogimislehtedele, kui nad kasutavad ressursse, mis vajavad autentimist. Ümbersuunamised sisaldavad tavaliselt returnUrl päringustringi parameetrit, et kasutajad saaksid pärast edukat sisselogimist naasta algselt soovitud URL-ile. Pärast kasutaja autentimist suunatakse ta algsele URL-ile.
Rünnaku näide
Pahatahtlik kasutaja võib välja töötada rünnaku, mille eesmärk on anda pahatahtlikule kasutajale ligipääs kasutaja mandaadiandmetele või tundlikule teabele. Rünnaku alustamiseks petab pahatahtlik kasutaja kasutajat klõpsama lingil teie saidi maandumislehele ja lisama sellele URL-ile returnUrl päringustringi väärtuse. selleks, etcontoso.comnäiteks rakendus onhttp://contoso.com/Account/LogOn?returnUrl=/Home/AboutSisaldab maandumislehte. Rünnak järgneb järgmistele sammudele:
- Kasutaja klõpsab pahatahtlikul lingilhttp://contoso.com/Account/LogOn?returnUrl=http://contoso1.com/Account/LogOn(Teine URL on "contoso1.com", asemel "contoso.com”) 。
- Kasutaja logib edukalt sisse.
- Kasutaja suunatakse saidilehttp://contoso1.com/Account/LogOn(Pahatahtlik sait, mis näeb välja täpselt nagu päris leht).
- Kasutaja logib uuesti sisse (andes pahatahtlikule saidile mandaadid) ja suunatakse tagasi päris saidile.
- Kasutajad võivad arvata, et nende esimene sisselogimiskatse ebaõnnestus ja teine õnnestus.Tõenäoliselt ei tea kasutajad endiselt, et nende mandaate on kompromiteeritud。
Lisaks maandumislehtedele pakuvad mõned saidid ümbersuunamislehti või lõpp-punkte. Oletame, et su rakendusel on leht, kus on avatud ümbersuunamine /Home/Redirect. Näiteks võib ründaja luua e-kirjas punkti[yoursite]/Home/Redirect?url=http://phishingsite.com/Home/LoginLink. Tavalised kasutajad näevad, et URL algab sinu saidi nimega. Usaldusest klõpsavad nad lingil. Avatud suunamised suunavad kasutajad andmepüügisaitidele, mis näevad välja samasugused nagu sinu omad, ning kasutajad saavad sisse logida saitidele, mida nad arvavad olevat sinu omad.
Avatud ümbersuunamise rünnakute ennetamine
Veebirakenduste arendamisel käsitletakse kõiki kasutajate poolt esitatud andmeid ebausaldusväärsetena. Kui sinu rakendusel on võimalus kasutajaid suunata URL-i sisu põhjal, veendu, et sellised ümbersuunamised tehakse ainult lokaalselt sinu rakenduses (või suunatakse teadaolevatele URL-idele, mitte päringustringis olevatele URL-idele).
LocalRedirect
Kontrolleri abimeetodi kasutamine LocalRedirect baasklassis:
Kui määratakse mitte-lokaalne URL, lisab LocalRedirect erandi. Vastasel juhul käitub see samamoodi nagu ümbersuunamise meetod. Erandiinfo on järgmine:
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. Lähtekood on järgmine:
Täitmisprotsess: LocalRedirect -> LocalRedirectResult -> IActionResultExecutor<LocalRedirectResult> -> LocalRedirectResultExecutor -> UrlHelper -> IsLocalUrl -> CheckIsLocalUrl ning lõpuks kutsutakse IsLocalUrl hindama (UrlHelperFactory rakendab vaikimisi IUrlHelperFactory liidest). )。
Lähtekoodi aadress:Hüperlingi sisselogimine on nähtav.
IsLocalUrl
IsLocalUrl enne ümbersuunamist testi URL-i selle meetodiga:
Kood on järgmine:
Testkood on järgmine:
Kui sul lubatakse hüpata teistele domeeninimede saitidele, saad rakendada IUrlHelperFactory liidese ja muuta IServiceCollection'i, et see asendaks vaikimisi rakendusklassi programmi käivitamisel.
Viide:Hüperlingi sisselogimine on nähtav.
(Lõpp)
|