Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 5685|Risposta: 2

[Fonte] ASP.NET Core (20) Prevenire attacchi di reindirizzamento aperto

[Copiato link]
Pubblicato su 06/06/2023 21:55:38 | | | |
Requisiti: Ho recentemente letto il documento ASP.NET Core di Microsoft "Prevenire attacchi di reindirizzamento aperto in ASP.NET Core", che significa approssimativamenteGli sviluppatori dovrebbero prestare attenzione al percorso del sito locale quando saltano all'indirizzo di callback per evitare che alcune persone falsifichino malevolmente l'indirizzo di callback per attacchi di phishing。 Studia il codice e preparati a portarlo sul progetto ASP.NET MVC.

Ricordo che un grande produttore aveva già avuto questa vulnerabilità in passato, e alcune persone l'hanno usata per sottrarre traffico da QQ e WeChat, come segue:



Sfruttando la vulnerabilità, alcuni strumenti di chat non sono riusciti a impedire agli utenti di cliccare sui link per accedere a contenuti di siti web dannosi a causa della loro fiducia nei domini aziendali di grandi dimensioni.

Cos'è un attacco di reindirizzamento aperto?

Le applicazioni web spesso indirizzano gli utenti alle pagine di accesso quando accedono a risorse che richiedono autenticazione. I redirect includono tipicamente un parametro di querystring returnUrl in modo che gli utenti possano tornare all'URL originariamente richiesto dopo un login riuscito. Dopo che l'utente si è autenticato, viene reindirizzato all'URL richiesto originariamente.

Esempio di attacco

Un utente malevolto può sviluppare un attacco progettato per dare a un utente malevolo accesso alle credenziali o alle informazioni sensibili di un utente. Per avviare un attacco, un utente malevolo ingannerebbe l'utente facendolo cliccare su un link alla landing page del sito e aggiungerebbe il valore della querystring returnUrl a quell'URL. per potercontoso.comAd esempio, l'app è inhttp://contoso.com/Account/LogOn?returnUrl=/Home/AboutContiene una pagina di destinazione. L'attacco segue questi passaggi:

  • L'utente clicca su un link malevolo ahttp://contoso.com/Account/LogOn?returnUrl=http://contoso1.com/Account/LogOn(Il secondo URL è "contoso1.com", invece di "contoso.com”) 。
  • L'utente riesce ad effettuare il login.
  • L'utente viene reindirizzato al sitohttp://contoso1.com/Account/LogOn(Un sito malevolo che assomiglia esattamente a quello reale).
  • L'utente effettua nuovamente il login (fornendo credenziali al sito malevolino) e viene reindirizzato al sito reale.
  • Gli utenti potrebbero pensare che il primo tentativo di accesso sia fallito e il secondo sia riuscito.È probabile che gli utenti non sappiano ancora che le loro credenziali sono state compromesse




Oltre alle landing page, alcuni siti offrono pagine di reindirizzamento o endpoint. Supponiamo che la tua app abbia una pagina che include un redirect aperto, /Home/Redirect. Ad esempio, un attaccante potrebbe creare un punto in un'email[yoursite]/Home/Redirect?url=http://phishingsite.com/Home/Logincollegamento. Gli utenti abituali vedranno che l'URL inizia con il nome del tuo sito. Per fiducia, cliccano sul link. Apri i reindirizzamenti e poi invia gli utenti a siti di phishing che assomigliano ai tuoi, e gli utenti possono accedere a siti che ritengono siano i tuoi.

Prevenire attacchi di redirezione aperta

Quando si sviluppano applicazioni web, tutti i dati forniti dagli utenti vengono trattati come inaffidabili. Se la tua app ha la capacità di reindirizzare gli utenti in base al contenuto degli URL, assicurati che tali reindirizzamenti vengano effettuati solo localmente nella tua app (o reindirizzi verso URL noti, non verso quelli forniti nella querystring).

LocalRedirect

Usando il metodo Controller helper nella classe base LocalRedirect:

Se viene specificato un URL non locale, LocalRedirect lancia un'eccezione. Altrimenti, si comporta allo stesso modo del metodo Redirect. Le informazioni sulle eccezioni sono le seguenti:

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.
Il codice sorgente è il seguente:



Processo di esecuzione: LocalRedirect -> LocalRedirectResult -> IActionResultExecutor<LocalRedirectResult> -> LocalRedirectResultExecutor -> UrlHelper -> IsLocalUrl -> CheckIsLocalUrl, e alla fine, IsLocalUrl verrà chiamata a giudicare (UrlHelperFactory implementa di default l'interfaccia IUrlHelperFactory. )。

Indirizzo del codice sorgente:Il login del link ipertestuale è visibile.

IsLocalUrl

IsLocalUrl prima di reindirizzare, testa l'URL usando questo metodo:

Il codice è il seguente:

Il codice di prova è il seguente:



Se ti è permesso saltare su altri siti di nomi di dominio, puoi implementare l'interfaccia IUrlHelperFactory e modificare IServiceCollection per sostituire la classe di implementazione predefinita all'avvio del programma.

Riferimento:Il login del link ipertestuale è visibile.

(Fine)





Precedente:Docker compila immagini sopra sistemi Windows
Prossimo:[Gira] (MSSQL) Int e guid database SQL Server per il confronto delle chiavi primarie
 Padrone di casa| Pubblicato su 06/06/2023 21:57:12 |
ASP.NET Core (diciannove) utilizza BackgroundService per eseguire task in background
https://www.itsvse.com/thread-10591-1-1.html

ASP.NET Core (18) Personalizza una semplice cache di uscita OutputCache
https://www.itsvse.com/thread-10583-1-1.html

ASP.NET Core (17) integra l'analisi delle prestazioni delle applicazioni MiniProfile
https://www.itsvse.com/thread-10571-1-1.html

ASP.NET Core (16) Dipendente dall'iniezione di servizi di registrazione dinamica
https://www.itsvse.com/thread-10560-1-1.html

ASP.NET Core (XV) utilizza HttpClient per inviare richieste HTTP
https://www.itsvse.com/thread-10311-1-1.html

ASP.NET Core (quattordici) si basa sul captcha dell'immagine SkiaSharp
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII) per determinare se si tratta di una richiesta Ajax o meno
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (dodici) front-end JS, bundle CSS e compressione
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET percorso endpoint Core (XI) aggiunge middleware per visualizzare tutti i servizi DI
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Spiegazione dettagliata delle priorità di configurazione in Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Spiegazione dettagliata del middleware Middleware di Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET fosso dei parametri predefiniti dell'interfaccia di Swagger in Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Core (7) Analisi approfondita del codice sorgente del framework
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI ottiene manualmente il metodo di iniezione degli oggetti
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (cinque) si basa sulle transazioni distribuite CAP
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Filtro Core(4) validazione unificata del modello ModelState
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) Creare dinamicamente istanze usando ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Core (2) Riavvia l'applicazione tramite codice
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) utilizza la cache Redis
https://www.itsvse.com/thread-9393-1-1.html
 Padrone di casa| Pubblicato su 06/06/2023 22:01:21 |
Il metodo IsLocalUrl viene portato sul framework .NET come segue:

Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com