Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 5685|Resposta: 2

[Fonte] ASP.NET Núcleo (20) Prevenir ataques de redirecionamento aberto

[Copiar link]
Publicado em 06/06/2023 21:55:38 | | | |
Requisitos: Recentemente li o documento ASP.NET Core da Microsoft "Prevenindo ataques de redirecionamento aberto no ASP.NET Core", que significa aproximadamenteOs desenvolvedores devem prestar atenção ao caminho do site local ao pular para o endereço de retorno para evitar que algumas pessoas forjem maliciosamente o endereço de retorno para ataques de phishing。 Estude o código e prepare-se para portá-lo para o projeto ASP.NET MVC.

Lembro que um grande fabricante já teve essa vulnerabilidade antes, e algumas pessoas a usaram para drenar tráfego do QQ e do WeChat, da seguinte forma:



Explorando a vulnerabilidade, algumas ferramentas de chat não conseguiram impedir que usuários clicassem em links para acessar conteúdos maliciosos devido à confiança em domínios de grandes empresas.

O que é um ataque de redirecionamento aberto?

Aplicações web frequentemente redirecionam os usuários para páginas de login quando acessam recursos que exigem autenticação. Os redirecionamentos normalmente incluem um parâmetro de sequência de consulta returnUrl para que os usuários possam retornar à URL originalmente solicitada após um login bem-sucedido. Após a autenticação do usuário, ele é redirecionado para a URL que solicitou originalmente.

Exemplo de ataque

Um usuário malicioso pode desenvolver um ataque projetado para dar a um usuário malicioso acesso às credenciais ou informações sensíveis de um usuário. Para iniciar um ataque, um usuário malicioso enganaria o usuário para clicar em um link para a página de destino do seu site e adicionar o valor da sequência de consulta returnUrl àquela URL. para quecontoso.comPor exemplo, o aplicativo está emhttp://contoso.com/Account/LogOn?returnUrl=/Home/AboutContém uma página inicial. O ataque segue os seguintes passos:

  • O usuário clica em um link malicioso parahttp://contoso.com/Account/LogOn?returnUrl=http://contoso1.com/Account/LogOn(A segunda URL é "contoso1.com", em vez de "contoso.com”) 。
  • O usuário faz login com sucesso.
  • O usuário é redirecionado para o sitehttp://contoso1.com/Account/LogOn(Um site malicioso que se parece exatamente com o real).
  • O usuário faz login novamente (fornecendo credenciais para o site malicioso) e é redirecionado de volta para o site real.
  • Os usuários podem pensar que a primeira tentativa de login falhou e a segunda tentativa foi um sucesso.É provável que os usuários ainda não saibam que suas credenciais foram comprometidas




Além das landing pages, alguns sites oferecem páginas de redirecionamento ou endpoints. Digamos que seu app tenha uma página que inclui um redirecionamento aberto, /Home/Redirection. Por exemplo, um atacante pode criar um ponto em um e-mail[yoursite]/Home/Redirect?url=http://phishingsite.com/Home/Loginlink. Usuários comuns verão que a URL começa com o nome do seu site. Por confiança, eles clicam no link. Abra redirecionamentos e então envie os usuários para sites de phishing que se parecem com o seu, e os usuários podem fazer login em sites que acham seus.

Prevenir ataques de redirecionamento aberto

Ao desenvolver aplicações web, todos os dados fornecidos pelo usuário são tratados como não confiáveis. Se seu app tem a capacidade de redirecionar usuários com base no conteúdo das URLs, certifique-se de que tais redirecionamentos sejam feitos apenas localmente no seu app (ou redirecionem para URLs conhecidas, não para quaisquer URLs que possam estar fornecidas na sequência de consulta).

LocalRedirecionamento

Usando o método ajudante Controller na classe base LocalRedirect:

Se uma URL não local for especificada, o LocalRedirect lança uma exceção. Caso contrário, ele se comporta da mesma forma que o método Redirecionar. As informações de exceção são as seguintes:

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.
O código-fonte é o seguinte:



Processo de execução: LocalRedirect -> LocalRedirectResult -> IActionResultExecutor<LocalRedirectResult> -> LocalRedirectResultExecutor -> UrlHelper -> IsLocalUrl -> CheckIsLocalUrl, e no final, IsLocalUrl será chamado para julgar (UrlHelperFactory implementa a interface IUrlHelperFactory por padrão. )。

Endereço do código-fonte:O login do hiperlink está visível.

IsLocalUrl

IsLocalUrl antes de redirecionar, teste a URL usando este método:

O código é o seguinte:

O código do teste é o seguinte:



Se você puder pular para outros sites de nomes de domínio, pode implementar a interface IUrlHelperFactory e modificar o IServiceCollection para substituir a classe padrão de implementação quando o programa iniciar.

Referência:O login do hiperlink está visível.

(Fim)





Anterior:Docker cria imagens sobre sistemas Windows
Próximo:[Girar] (MSSQL) Int e GUID do banco de dados SQL Server para comparação de chaves primárias
 Senhorio| Publicado em 06/06/2023 21:57:12 |
ASP.NET Core (dezenove) usa o BackgroundService para executar tarefas em segundo plano
https://www.itsvse.com/thread-10591-1-1.html

ASP.NET Núcleo (18) Personalize um cache de saída simples do OutputCache
https://www.itsvse.com/thread-10583-1-1.html

ASP.NET Core (17) integra análise de desempenho de aplicações MiniProfile
https://www.itsvse.com/thread-10571-1-1.html

ASP.NET Núcleo (16) Dependente da injeção de serviços de registro dinâmico
https://www.itsvse.com/thread-10560-1-1.html

ASP.NET Core (XV) usa HttpClient para enviar requisições HTTP
https://www.itsvse.com/thread-10311-1-1.html

ASP.NET Core (quatorze) é baseado no captcha de imagem SkiaSharp
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII) para determinar se é uma requisição Ajax ou não
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (doze) front-end JS, agrupamento e compressão de CSS
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET rota de endpoint Core (XI) adiciona middleware para exibir todos os serviços DI
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Explicação detalhada das prioridades de configuração no Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Explicação detalhada do middleware Middleware do Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET dos parâmetros padrão da interface Swagger no Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Core (7) Análise aprofundada do código-fonte do framework
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI obtém manualmente o método de injeção de objetos
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (cinco) é baseado em transações distribuídas CAP
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Validação unificada do modelo ModelState do filtro Core(4)
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) Criar instâncias dinamicamente usando ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Núcleo (2) Reiniciar a aplicação por código
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) usa cache Redis
https://www.itsvse.com/thread-9393-1-1.html
 Senhorio| Publicado em 06/06/2023 22:01:21 |
O método IsLocalUrl é portado para o framework .NET da seguinte forma:

Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com