Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 5685|Respuesta: 2

[Fuente] ASP.NET Núcleo (20) Prevenir ataques de redirección abierta

[Copiar enlace]
Publicado en 6/6/2023 21:55:38 | | | |
Requisitos: Recientemente leí el documento ASP.NET Core de Microsoft "Preventing Open Redirect Attacks in ASP.NET Core", que significa aproximadamenteLos desarrolladores deben prestar atención a la ruta del sitio local al saltar a la dirección de devolución para evitar que algunas personas falsificen maliciosamente la dirección de devolución para ataques de phishing。 Estudia el código y prepárate para portarlo al proyecto ASP.NET MVC.

Recuerdo que un fabricante importante ya tenía esta vulnerabilidad antes, y algunas personas la usaron para drenar tráfico de QQ y WeChat, de la siguiente manera:



Aprovechando la vulnerabilidad, algunas herramientas de chat no pudieron impedir que los usuarios hicieran clic en enlaces para acceder a contenido malicioso de sitios web debido a su confianza en los dominios de grandes empresas.

¿Qué es un ataque de redirección abierta?

Las aplicaciones web redirigen frecuentemente a los usuarios a páginas de inicio de sesión cuando acceden a recursos que requieren autenticación. Las redirecciones suelen incluir un parámetro de sequencia de consulta returnUrl para que los usuarios puedan volver a la URL solicitada originalmente tras un inicio de sesión exitoso. Después de autenticarse, el usuario es redirigido a la URL que solicitó originalmente.

Ejemplo de un ataque

Un usuario malicioso puede desarrollar un ataque diseñado para dar acceso a las credenciales o información sensible de un usuario. Para iniciar un ataque, un usuario malicioso engañaría al usuario para que hiciera clic en un enlace a la página de destino de tu sitio y añadiría el valor de la cadena de consulta returnUrl a esa URL. para quecontoso.compor ejemplo, la app está enhttp://contoso.com/Account/LogOn?returnUrl=/Home/AboutContiene una página de aterrizaje. El ataque sigue estos pasos:

  • El usuario hace clic en un enlace malicioso parahttp://contoso.com/Account/LogOn?returnUrl=http://contoso1.com/Account/LogOn(La segunda URL es "contoso1.com", en lugar de "contoso.com”) 。
  • El usuario inicia sesión con éxito.
  • El usuario es redirigido al sitiohttp://contoso1.com/Account/LogOn(Un sitio malicioso que se parece exactamente al real).
  • El usuario vuelve a iniciar sesión (proporcionando credenciales al sitio malicioso) y es redirigido de nuevo al sitio real.
  • Los usuarios pueden pensar que su primer intento de inicio de sesión falló y el segundo intento tuvo éxito.Es probable que los usuarios aún no sepan que sus credenciales han sido comprometidas




Además de las páginas de destino, algunos sitios ofrecen páginas de redirección o endpoints. Supongamos que tu app tiene una página que incluye una redirección abierta, /Inicio/Redirección. Por ejemplo, un atacante podría crear un punto en un correo electrónico[yoursite]/Home/Redirect?url=http://phishingsite.com/Home/Loginenlace. Los usuarios habituales verán que la URL comienza con el nombre de tu sitio. Por confianza, hacen clic en el enlace. Abre redirecciones y luego envía a los usuarios a sitios de phishing que se parecen al tuyo, y los usuarios pueden iniciar sesión en sitios que creen que son tuyos.

Prevenir ataques de redirección abierta

Al desarrollar aplicaciones web, todos los datos proporcionados por el usuario se consideran poco fiables. Si tu app puede redirigir a los usuarios según el contenido de la URL, asegúrate de que dichas redirecciones solo se realicen localmente en tu app (o redirijan a URLs conocidas, no a las que puedan estar en la cadena de consulta).

LocalRedirect

Usando el método Controller helper en la clase base LocalRedirect:

Si se especifica una URL no local, LocalRedirect lanza una excepción. De lo contrario, se comporta igual que el método Redireccionar. La información de las excepciones es la siguiente:

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.
El código fuente es el siguiente:



Proceso de ejecución: LocalRedirect -> LocalRedirectResult -> IActionResultExecutor<LocalRedirectResult> -> LocalRedirectResultExecutor -> UrlHelper -> IsLocalUrl -> CheckIsLocalUrl, y al final, se llamará a IsLocalUrl para juzgar (UrlHelperFactory implementa por defecto la interfaz IUrlHelperFactory. )。

Dirección del código fuente:El inicio de sesión del hipervínculo es visible.

IsLocalUrl

IsLocalUrl antes de redirigir, prueba la URL usando este método:

El código es el siguiente:

El código de prueba es el siguiente:



Si se permite saltar a otros sitios de nombres de dominio, puedes implementar la interfaz IUrlHelperFactory y modificar IServiceCollection para reemplazar la clase de implementación predeterminada cuando inicia el programa.

Referencia:El inicio de sesión del hipervínculo es visible.

(Fin)





Anterior:Docker compila imágenes sobre sistemas Windows
Próximo:[Girar] (MSSQL) Int y guid de la base de datos SQL Server para comparación de claves primarias
 Propietario| Publicado en 6/6/2023 21:57:12 |
ASP.NET Core (diecinueve) utiliza BackgroundService para ejecutar tareas en segundo plano
https://www.itsvse.com/thread-10591-1-1.html

ASP.NET Núcleo (18) Personalizar una caché de salida sencilla de OutputCache
https://www.itsvse.com/thread-10583-1-1.html

ASP.NET Core (17) integra el análisis de rendimiento de aplicaciones MiniProfile
https://www.itsvse.com/thread-10571-1-1.html

ASP.NET Núcleo (16) Dependiente de la inyección de servicios de registro dinámico
https://www.itsvse.com/thread-10560-1-1.html

ASP.NET Core (XV) utiliza HttpClient para enviar solicitudes HTTP
https://www.itsvse.com/thread-10311-1-1.html

ASP.NET Core (catorce) está basado en el captcha de imagen SkiaSharp
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII) para determinar si es una solicitud Ajax o no
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (doce) JS front-end, empaquetado y compresión CSS
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET ruta Core (XI) añade middleware para mostrar todos los servicios DI
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Explicación detallada de las prioridades de configuración en Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Explicación detallada del middleware Middleware de Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET pozo de los parámetros predeterminados de la interfaz Swagger en Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Núcleo (7) Análisis en profundidad del código fuente del framework
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI obtiene manualmente el método de inyectar objetos
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (cinco) se basa en transacciones distribuidas CAP
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Validación unificada de modelos de modelo del filtro Core(4)
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) Crear dinámicamente instancias usando ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Núcleo (2) Reiniciar la aplicación por código
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) utiliza caché Redis
https://www.itsvse.com/thread-9393-1-1.html
 Propietario| Publicado en 6/6/2023 22:01:21 |
El método IsLocalUrl se porta al framework .NET de la siguiente manera:

Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com