Követelmények: Nemrég olvastam a Microsoft ASP.NET Core dokumentumát, "Preventing Open Redirect Attacks in ASP.NET Core", ami nagyjából azt jelenti, hogyA fejlesztőknek figyelniük kell a helyi oldal útvonalára, amikor visszahívó címre ugranak, hogy megakadályozzák egyesek rosszindulatú hamisítást a callback címet adathalász támadásokhoz。 Tanulmányozd a kódot, és készülj elő annak átportolására a ASP.NET MVC projekthez.
Emlékszem, hogy egy nagy gyártónak volt ilyen sebezhetősége korábban, és néhányan ezt használták a QQ és a WeChat forgalma elvonására, a következők szerint:
A sebezhetőség kihasználásakor néhány csevegőeszköz nem tudta megakadályozni, hogy a felhasználók rákattintsanak a rosszindulatú weboldal tartalmaihoz, mivel nagy vállalati domainekben bíztak.
Mi az a nyílt átirányítási támadás?
Webalkalmazások gyakran irányítják a felhasználókat a bejelentkezési oldalakra, amikor olyan forrásokhoz férnek hozzá, amelyek hitelesítést igényelnek. Az átirányítások általában tartalmaznak egy returnUrl querystring paramétert, hogy a felhasználók sikeres bejelentkezés után visszatérhessenek az eredetileg kért URL-hez. Miután a felhasználó hitelesítést kap, átirányítják az eredetileg kért URL-re.
Támadás példája
Egy rosszindulatú felhasználó olyan támadást fejleszthet, amely lehetővé teszi, hogy a rosszindulatú felhasználó hozzáférjen a felhasználó hitelesítő adataihoz vagy érzékeny adataihoz. Támadás indításához egy rosszindulatú felhasználó becsapja a felhasználót, hogy kattintson egy linkre az oldalad kezdőlapjára, és hozzáadja a returnUrl lekérdezéslánc értéket az adott URL-re. hogycontoso.compéldául az alkalmazás ahttp://contoso.com/Account/LogOn?returnUrl=/Home/AboutTartalmaz egy landoldalt. A támadás az alábbi lépéseket követi:
- A felhasználó egy rosszindulatú linkre kattinthttp://contoso.com/Account/LogOn?returnUrl=http://contoso1.com/Account/LogOn(A második URL "contoso1.com", helyette"contoso.com”) 。
- A felhasználó sikeresen bejelentkezik.
- A felhasználót átirányítják az oldalrahttp://contoso1.com/Account/LogOn(Egy rosszindulatú oldal, ami pontosan úgy néz ki, mint a valódi).
- A felhasználó ismét bejelentkezik (megadva a rosszindulatú oldal adatait), és visszairányítják a valódi oldalra.
- A felhasználók azt gondolhatják, hogy az első bejelentkezési kísérletük sikertelen, a második pedig sikerült.Valószínű, hogy a felhasználók még mindig nem tudják, hogy a hitelesítő adataikat kompromittálták。
A landing oldalakon kívül néhány oldal kínál átirányítási oldalakat vagy végpontokat is. Tegyük fel, hogy az alkalmazásodnak van egy oldala, amely nyílt átirányítást tartalmaz, /Home/Redirect. Például egy támadó létrehozhat egy pontot egy e-mailben[yoursite]/Home/Redirect?url=http://phishingsite.com/Home/Loginláncszem. A hétköznapi felhasználók látják, hogy az URL az oldalneveddel kezdődik. Bizalomból kattintanak a linkre. A nyílt átirányítások aztán a felhasználókat olyan adathalász oldalakra küldik, amelyek hasonlítanak a tiédhez, és bejelentkezhetnek olyan oldalakra, amelyekről úgy gondolják, hogy a tiéd.
Nyílt átirányítási támadások megelőzése
Webalkalmazások fejlesztésekor minden felhasználó által biztosított adatot megbízhatatlannak kezelnek. Ha az alkalmazásod képes átirányítani a felhasználókat URL-tartalom alapján, győződjön meg róla, hogy ezek az átirányítás csak helyben legyen az alkalmazásban (vagy ismert URL-ekre irányítani, nem olyan URL-ekre, amelyek a lekérdezéssorozatban elérhetők).
LocalRedirect
A Controller-segéd metódus használatával a LocalRedirect alaposztályban:
Ha nem helyi URL-t jelölnek meg, a LocalRedirect kivételt ad ki. Egyébként ugyanúgy viselkedik, mint a Redirect módszer. A kivétel adatai a következők:
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. A forráskód a következő:
Végrehajtási folyamat: LocalRedirect -> LocalRedirectResult -> IActionResultExecutor<LocalRedirectResult> -> LocalRedirectResultExecutor -> UrlHelper -> IsLocalUrl -> CheckIsLocalUrl, és végül az IsLocalUrl-t hívják ítélni (az UrlHelperFactory alapértelmezetten az IUrlHelperFactory interfészt valósítja meg). )。
Forráskód cím:A hiperlink bejelentkezés látható.
IsLocalUrl
IsLocalUrl jelzéssel az átirányítás előtt teszteld az URL-t a következő módszerrel:
A kódex a következő:
A tesztkód a következő:
Ha engedélyezett más domain nevű oldalakra ugrani, akkor megvalósíthatod az IUrlHelperFactory interfészt, és módosíthatod az IServiceCollection-t, hogy a program elindulásakor lecserélje az alapértelmezett implementációs osztályt.
Utalás:A hiperlink bejelentkezés látható.
(Vége)
|