Vaatimukset: Luin äskettäin Microsoftin ASP.NET Core -dokumentin "Preventing Open Redirect Attacks in ASP.NET Core", joka tarkoittaa suunnilleenKehittäjien tulisi kiinnittää huomiota paikallisen sivuston reittiin siirtyessään callback-osoitteeseen, jotta jotkut eivät vahingossa väärentämästä callback-osoitetta tietojenkalastelua varten。 Opiskele koodi ja valmistaudu siirtämään se ASP.NET MVC-projektiin.
Muistan, että eräällä suurella valmistajalla oli tämä haavoittuvuus aiemmin, ja jotkut käyttivät sitä poistaakseen liikennettä QQ:sta ja WeChatista, kuten seuraava:
Hyödyntäen haavoittuvuutta jotkut chat-työkalut eivät pystyneet estämään käyttäjiä klikkaamasta linkkejä päästäkseen haitalliseen verkkosivuston sisältöön, koska he luottivat suurten yritysten verkkotunnuksiin.
Mikä on avoin uudelleenohjaushyökkäys?
Verkkosovellukset ohjaavat käyttäjät usein kirjautumissivuille, kun he käyttävät resursseja, jotka vaativat todennuksen. Uudelleenohjaukset sisältävät tyypillisesti returnUrl-kyselymerkkijonon parametrin, jotta käyttäjät voivat palata alkuperäiseen URL-osoitteeseen onnistuneen kirjautumisen jälkeen. Kun käyttäjä on todennut, hänet ohjataan alkuperäiseen URL-osoitteeseen.
Esimerkki hyökkäyksestä
Haitallinen käyttäjä voi kehittää hyökkäyksen, jonka tarkoituksena on antaa haitalliselle käyttäjälle pääsy käyttäjän tunnuksiin tai arkaluontoisiin tietoihin. Hyökkäyksen aloittamiseksi haitallinen käyttäjä huijaisi käyttäjän klikkaamaan linkkiä sivustosi laskeutumissivulle ja lisäämään returnUrl-kyselymerkkijonon arvon kyseiseen URL-osoitteeseen. jottacontoso.comesimerkiksi sovellus onhttp://contoso.com/Account/LogOn?returnUrl=/Home/AboutSisältää laskeutumissivun. Hyökkäys etenee seuraavia vaiheita:
- Käyttäjä klikkaa haitallista linkkiähttp://contoso.com/Account/LogOn?returnUrl=http://contoso1.com/Account/LogOn(Toinen URL on "contoso1.com", sen sijaan "contoso.com”) 。
- Käyttäjä kirjautuu onnistuneesti sisään.
- Käyttäjä ohjataan sivustollehttp://contoso1.com/Account/LogOn(Haitallinen sivusto, joka näyttää täsmälleen oikealta).
- Käyttäjä kirjautuu uudelleen sisään (antaen tunnistetiedot haitalliselle sivustolle) ja ohjataan takaisin oikealle sivustolle.
- Käyttäjät saattavat ajatella, että heidän ensimmäinen kirjautumisyrityksensä epäonnistui ja toinen onnistui.On todennäköistä, että käyttäjät eivät vieläkään tiedä, että heidän tunnuksensa on vaarantunut.。
Laskeutumissivujen lisäksi jotkut sivustot tarjoavat uudelleenohjaussivuja tai päätepisteitä. Oletetaan, että sovelluksessasi on sivu, jossa on avoin uudelleenohjaus, /Home/Redirect. Esimerkiksi hyökkääjä voi luoda pisteen sähköpostiin[yoursite]/Home/Redirect?url=http://phishingsite.com/Home/Loginlinkki. Tavalliset käyttäjät näkevät, että URL alkaa sivustosi nimellä. Luottamuksesta he klikkaavat linkkiä. Avoimet uudelleenohjaukset ohjaavat käyttäjät tietojenkalastelusivustoille, jotka näyttävät samalta kuin omasi, ja käyttäjät voivat kirjautua sivustoille, joita he luulevat olevan omiasi.
Estä avoimet uudelleenohjaushyökkäykset
Verkkosovelluksia kehitettäessä kaikki käyttäjän antamat tiedot käsitellään epäluotettavana. Jos sovelluksessasi on kyky ohjata käyttäjiä URL-sisällön perusteella, varmista, että tällaiset uudelleenohjaukset tehdään vain paikallisesti sovelluksessasi (tai ohjataan tunnetuihin URL-osoitteisiin, ei kyselymerkkijonossa mahdollisesti annettuihin URL-osoitteisiin).
LocalRedirect
Käyttämällä Controller-apumenetelmää LocalRedirect-perusluokassa:
Jos määritellään ei-paikallinen URL, LocalRedirect heittää poikkeuksen. Muuten se käyttäytyy samalla tavalla kuin Redirect-menetelmä. Poikkeustiedot ovat seuraavat:
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ähdekoodi on seuraava:
Suoritusprosessi: LocalRedirect -> LocalRedirectResult -> IActionResultExecutor<LocalRedirectResult> -> LocalRedirectResultExecutor -> UrlHelper -> IsLocalUrl -> CheckIsLocalUrl, ja lopulta IsLocalUrl kutsutaan arvioimaan (UrlHelperFactory toteuttaa oletuksena IUrlHelperFactory-rajapinnan). )。
Lähdekoodin osoite:Hyperlinkin kirjautuminen on näkyvissä.
IsLocalUrl
IsLocalUrl ennen uudelleenohjausta testaa URL tällä menetelmällä:
Koodi on seuraava:
Testikoodi on seuraava:
Jos voit siirtyä muihin verkkotunnussivustoihin, voit toteuttaa IUrlHelperFactory-rajapinnan ja muokata IServiceCollectionia korvaamaan oletustoteutusluokan ohjelman käynnistyessä.
Viittaus:Hyperlinkin kirjautuminen on näkyvissä.
(Loppu)
|