Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 5685|Odpověď: 2

[Zdroj] ASP.NET Jádro (20) Zabránit otevřeným přesměrovacím útokům

[Kopírovat odkaz]
Zveřejněno 06.06.2023 21:55:38 | | | |
Požadavky: Nedávno jsem četl dokument Microsoftu ASP.NET Core "Preventing Open Redirect Attacks in ASP.NET Core", což přibližně znamenáVývojáři by měli při přechodu na callback adresu věnovat pozornost směru místního webu, aby zabránili některým lidem zlomyslně falšovat callback adresu pro phishingové útoky。 Prostudujte kód a připravte se na jeho portování do projektu ASP.NET MVC.

Pamatuji si, že jeden velký výrobce měl tuto zranitelnost dříve a někteří lidé ji používali k odčerpání provozu z QQ a WeChatu, a to následovně:



Některé chatovací nástroje využily tuto zranitelnost a nedokázaly zabránit uživatelům klikat na odkazy pro přístup k škodlivému obsahu webových stránek díky jejich důvěře ve velké firemní domény.

Co je to otevřený přesměrovací útok?

Webové aplikace často přesměrovávají uživatele na přihlašovací stránky, když přistupují ke zdrojům vyžadujícím autentizaci. Přesměrování obvykle obsahují parametr querystring returnUrl, aby se uživatelé mohli po úspěšném přihlášení vrátit k původně požadované URL. Po autentizaci je uživatel přesměrován na URL, o kterou původně žádal.

Příklad útoku

Škodlivý uživatel může vyvinout útok navržený tak, aby mu umožnil přístup k přihlašovacím údajům nebo citlivým informacím uživatele. Pro zahájení útoku by škodlivý uživatel uživatele oklamal, aby klikl na odkaz na vstupní stránku vašeho webu a přidal k této URL hodnotu querystringu returnUrl. abycontoso.comNapříklad aplikace je vhttp://contoso.com/Account/LogOn?returnUrl=/Home/AboutObsahuje vstupní stránku. Útok následuje tyto kroky:

  • Uživatel klikne na škodlivý odkazhttp://contoso.com/Account/LogOn?returnUrl=http://contoso1.com/Account/LogOn(Druhá URL je "contoso1.com", místo "contoso.com”) 。
  • Uživatel se úspěšně přihlásí.
  • Uživatel je přesměrován na stránkuhttp://contoso1.com/Account/LogOn(Škodlivý web, který vypadá přesně jako ten skutečný).
  • Uživatel se znovu přihlásí (zadá přihlašovací údaje na škodlivý web) a je přesměrován zpět na skutečný web.
  • Uživatelé si mohou myslet, že jejich první pokus o přihlášení selhal a druhý pokus byl úspěšný.Je pravděpodobné, že uživatelé stále nevědí, že jejich přihlašovací údaje byly kompromitovány




Kromě landing pages některé weby nabízejí přesměrovací stránky nebo endpointy. Řekněme, že vaše aplikace má stránku, která obsahuje otevřené přesměrování, /Home/Redirect. Například útočník může vytvořit bod v e-mailu[yoursite]/Home/Redirect?url=http://phishingsite.com/Home/Loginpropojit. Běžní uživatelé uvidí, že URL začíná názvem vašeho webu. Z důvěry kliknou na odkaz. Otevřená přesměrování pak přesměrují uživatele na phishingové stránky, které vypadají stejně jako vaše, a uživatelé se mohou přihlašovat na stránky, které považují za vaše.

Zabránit otevřeným přesměrovacím útokům

Při vývoji webových aplikací jsou všechna uživatelsky poskytovaná data považována za nedůvěryhodná. Pokud má vaše aplikace možnost přesměrovat uživatele na základě obsahu URL adres, ujistěte se, že taková přesměrování probíhají pouze lokálně ve vaší aplikaci (nebo přesměrovávají na známé URL, ne na ty z dotazovacího řetězce).

LocalRedirect

Použitím metody Controller helper v základní třídě LocalRedirect:

Pokud je určena nelokální URL, LocalRedirect vyhodí výjimku. Jinak se chová stejně jako metoda Přesměrování. Informace o výjimce jsou následující:

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 následující:



Proces vykonání: LocalRedirect -> LocalRedirectResult -> IActionResultExecutor<LocalRedirectResult> -> LocalRedirectResultExecutor -> UrlHelper -> IsLocalUrl -> CheckIsLocalUrl a nakonec bude IsLocalUrl vyvolán k posouzení (UrlHelperFactory ve výchozím nastavení implementuje rozhraní IUrlHelperFactory. )。

Adresa zdrojového kódu:Přihlášení k hypertextovému odkazu je viditelné.

IsLocalUrl

IsLocalUrl před přesměrováním otestujte URL touto metodou:

Kód je následující:

Testovací kód je následující:



Pokud je povoleno přejít na jiné doménové stránky, můžete implementovat rozhraní IUrlHelperFactory a upravit IServiceCollection tak, aby nahradil výchozí implementační třídu při spuštění programu.

Odkaz:Přihlášení k hypertextovému odkazu je viditelné.

(Konec)





Předchozí:Docker vytváří obrazy na systémech Windows
Další:[Otočit] (MSSQL) SQL Server databázový int a guid pro porovnání primárních klíčů
 Pronajímatel| Zveřejněno 06.06.2023 21:57:12 |
ASP.NET Core (devatenáct) používá BackgroundService k provádění úloh na pozadí
https://www.itsvse.com/thread-10591-1-1.html

ASP.NET Core (18) Přizpůsobit jednoduchou výstupní cache OutputCache
https://www.itsvse.com/thread-10583-1-1.html

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

ASP.NET Jádro (16) Závislé na injekci dynamických registračních služeb
https://www.itsvse.com/thread-10560-1-1.html

ASP.NET Core (XV) používá HttpClient k odesílání HTTP požadavků
https://www.itsvse.com/thread-10311-1-1.html

ASP.NET Core (čtrnáct) je založen na image captcha ze SkiaSharp
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII), abyste zjistili, zda jde o požadavek Ajaxu nebo ne
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Jádro (dvanáct) front-end JS, CSS balíčkování a komprese
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Core (XI) koncová trasa přidává middleware pro zobrazení všech DI služeb
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Podrobné vysvětlení priorit konfigurace v Core(10).
https://www.itsvse.com/thread-10265-1-1.html

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

ASP.NET propasti výchozích parametrů Swagger UI v Core(8).
https://www.itsvse.com/thread-9640-1-1.html

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

ASP.NET Core (VI) DI ručně získává metodu vstřikování objektů
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (pět) je založen na distribuovaných transakcích podle CAP
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Filtr Core(4) sjednocený validace modelů ModelState
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Jádro (iii) Dynamicky vytvářet instance pomocí ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Jádro (2) Restartovat aplikaci pomocí kódu
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) používá Redis caching
https://www.itsvse.com/thread-9393-1-1.html
 Pronajímatel| Zveřejněno 06.06.2023 22:01:21 |
Metoda IsLocalUrl je portována do .NET frameworku následovně:

Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com