Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 5685|Odpoveď: 2

[Zdroj] ASP.NET Core (20) Zabrániť otvoreným presmerovacím útokom

[Kopírovať odkaz]
Zverejnené 6. 6. 2023 21:55:38 | | | |
Požiadavky: Nedávno som čítal dokument Microsoftu ASP.NET Core "Preventing Open Redirect Attacks in ASP.NET Core", čo približne znamenáVývojári by si mali dávať pozor na trasu miestnej stránky pri preskakovaní na spätnú adresu, aby zabránili niektorým ľuďom zlovestne falšovať spätnú adresu pre phishingové útoky。 Študujte kód a pripravte sa na jeho portovanie do projektu ASP.NET MVC.

Pamätám si, že jeden veľký výrobca mal túto zraniteľnosť už predtým a niektorí ľudia ju používali na odčerpávanie návštevnosti z QQ a WeChatu, nasledovne:



Využívajúc zraniteľnosť, niektoré chatovacie nástroje nedokázali zabrániť používateľom klikať na odkazy na prístup k škodlivému obsahu webových stránok kvôli ich dôvere vo domény veľkých spoločností.

Čo je to otvorený presmerovací útok?

Webové aplikácie často presmerovávajú používateľov na prihlasovacie stránky, keď pristupujú k zdrojom vyžadujúcim autentifikáciu. Presmerovania zvyčajne obsahujú parameter querystring returnUrl, aby sa používatelia mohli po úspešnom prihlásení vrátiť na pôvodne požadovanú URL. Po autentifikácii je používateľ presmerovaný na pôvodne požadovanú URL.

Príklad útoku

Škodlivý používateľ môže vyvinúť útok navrhnutý tak, aby mu umožnil prístup k prihlasovacím údajom alebo citlivým informáciám používateľa. Na spustenie útoku by škodlivý používateľ oklamal používateľa, aby klikol na odkaz na vstupnú stránku vášho webu a pridal hodnotu querystringu returnUrl k tejto URL. abycontoso.comNapríklad aplikácia je vhttp://contoso.com/Account/LogOn?returnUrl=/Home/AboutObsahuje vstupnú stránku. Útok nasleduje tieto kroky:

  • Používateľ klikne na škodlivý odkazhttp://contoso.com/Account/LogOn?returnUrl=http://contoso1.com/Account/LogOn(Druhá URL je "contoso1.com", namiesto "contoso.com”) 。
  • Používateľ sa úspešne prihlási.
  • Používateľ je presmerovaný na stránkuhttp://contoso1.com/Account/LogOn(Škodlivá stránka, ktorá vyzerá presne ako tá skutočná).
  • Používateľ sa opäť prihlási (poskytne prihlasovacie údaje škodlivej stránke) a je presmerovaný späť na skutočnú stránku.
  • Používatelia si môžu myslieť, že ich prvý pokus o prihlásenie zlyhal a druhý bol úspešný.Je pravdepodobné, že používatelia stále nevedia, že ich prihlasovacie údaje boli kompromitované




Okrem vstupných stránok niektoré stránky ponúkajú aj presmerovacie stránky alebo koncové body. Povedzme, že vaša aplikácia má stránku, ktorá obsahuje otvorené presmerovanie, /Home/Redirect. Napríklad útočník môže vytvoriť bod v e-maile[yoursite]/Home/Redirect?url=http://phishingsite.com/Home/Loginväzba. Bežní používatelia uvidia, že URL začína názvom vašej stránky. Z dôvery kliknú na odkaz. Otvorené presmerovania potom posielajú používateľov na phishingové stránky, ktoré vyzerajú rovnako ako tie vaše, a používatelia sa môžu prihlásiť na stránky, o ktorých si myslia, že sú vaše.

Zabránenie otvoreným presmerovacím útokom

Pri vývoji webových aplikácií sa všetky údaje poskytované používateľmi považujú za nedôveryhodné. Ak má vaša aplikácia možnosť presmerovať používateľov na základe obsahu URL, uistite sa, že takéto presmerovania sa vykonávajú iba lokálne vo vašej aplikácii (alebo na známe URL, nie na URL, ktoré môžu byť uvedené v querystringu).

LocalRedirect

Použitím metódy Controller helper v základnej triede LocalRedirect:

Ak je špecifikovaná nelokálna URL, LocalRedirect vyhodí výnimku. Inak sa správa rovnako ako metóda Presmerovania. Informácie o výnimke sú nasledovné:

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.
Zdrojový kód je nasledovný:



Proces vykonávania: LocalRedirect -> LocalRedirectResult -> IActionResultExecutor<LocalRedirectResult> -> LocalRedirectResultExecutor -> UrlHelper -> IsLocalUrl -> CheckIsLocalUrl, a nakoniec bude IsLocalUrl vyvolaný na posúdenie (UrlHelperFactory štandardne implementuje rozhranie IUrlHelperFactory. )。

Adresa zdrojového kódu:Prihlásenie na hypertextový odkaz je viditeľné.

IsLocalUrl

IsLocalUrl pred presmerovaním otestujte URL touto metódou:

Kód je nasledovný:

Testovací kód je nasledovný:



Ak je povolené skočiť na iné doménové stránky, môžete implementovať rozhranie IUrlHelperFactory a upraviť IServiceCollection tak, aby nahradil predvolenú implementačnú triedu pri spustení programu.

Referencia:Prihlásenie na hypertextový odkaz je viditeľné.

(Koniec)





Predchádzajúci:Docker vytvára obrázky na vrchu Windows systémov
Budúci:[Otočiť] (MSSQL) SQL Server databázový int a guid na porovnanie primárnych kľúčov
 Prenajímateľ| Zverejnené 6. 6. 2023 21:57:12 |
ASP.NET Core (devätnásť) používa BackgroundService na vykonávanie úloh na pozadí
https://www.itsvse.com/thread-10591-1-1.html

ASP.NET Core (18) Prispôsobiť jednoduchú výstupnú cache OutputCache
https://www.itsvse.com/thread-10583-1-1.html

ASP.NET Core (17) integruje analýzu výkonu aplikácií MiniProfile
https://www.itsvse.com/thread-10571-1-1.html

ASP.NET Jadro (16) Závislé od injekcie dynamických registračných služieb
https://www.itsvse.com/thread-10560-1-1.html

ASP.NET Core (XV) používa HttpClient na odosielanie HTTP požiadaviek
https://www.itsvse.com/thread-10311-1-1.html

ASP.NET Core (štrnásť) je založený na image captcha SkiaSharp
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII) na určenie, či ide o Ajax požiadavku alebo nie
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (dvanásť) front-end JS, CSS bundlovanie a kompresia
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Core (XI) koncová trasa pridáva middleware na zobrazenie všetkých DI služieb
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Podrobné vysvetlenie priorít konfigurácie v Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Podrobné vysvetlenie middleware middleware v Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET z predvolených parametrov používateľského rozhrania Swagger v Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Jadro (7) Hĺbková analýza zdrojového kódu frameworku
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI manuálne získava metódu injektovania objektov
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (päť) je založený na distribuovaných transakciách podľa CAP
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(4) filter zjednotený validácia modelu ModelState
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Jadro (iii) Dynamicky vytvárať inštancie pomocou ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Core (2) Reštartovať aplikáciu pomocou kódu
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) používa Redis caching
https://www.itsvse.com/thread-9393-1-1.html
 Prenajímateľ| Zverejnené 6. 6. 2023 22:01:21 |
Metóda IsLocalUrl je portovaná do .NET frameworku nasledovne:

Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com