Com cada atualização .Net Core , a Microsoft prova que .Net Core é a estrutura mais poderosa, versátil e completa disponível para o desenvolvimento de aplicativos de desktop , móveis , nuvem e web poderosos . Ao contrário de um aplicativo desktop ou móvel, um aplicativo web é executado em um endereço público, o que é uma das razões pelas quais a segurança de um aplicativo web é de grande importância. Embora Asp.Net Core seja projetado com as melhores práticas de segurança em mente , ainda existem algumas vulnerabilidades que devemos estar atentos antes e depois do lançamento de nosso Asp.Net Coreformulários.
Neste artigo, veremos várias lacunas de segurança nos aplicativos da web Asp.Net Core e suas possíveis soluções. Vamos começar listando algumas das considerações de segurança importantes para nosso aplicativo .Net Core .
- Torne seu login mais seguro
- Transfira apenas dados confidenciais criptografados
- Lembre-se de limpar seus cookies ao sair
- Sempre use SSL
- Nunca armazene dados confidenciais em seu banco de dados explicitamente
- Trilhas de auditoria e registro são muito importantes
- Nunca exponha erros técnicos originais para o usuário final
- Cross Site Scripting (XSS)
- Tente esconder a versão do seu .Net Core
- Cross-Site Request Forgery (CSRF)
- LINQ pode proteger contra injeção de SQL
- Adicionar cheques durante a desserialização
- Sempre mantenha versões atualizadas de suas estruturas e bibliotecas
1. Torne o seu login mais seguro
A página de login é a porta de entrada de qualquer aplicativo. Considere um aplicativo como um painel de administração. Se uma pessoa não autorizada obtiver acesso ao seu aplicativo, ela poderá controlar todo o sistema. Assim, o seu primeiro passo deve ser sempre tornar o seu login mais seguro.

Aqui estão algumas dicas para proteger o ponto de entrada do seu aplicativo.
USE CONTAS COMPLEXAS
Nunca use nomes de usuário como admin e senhas como 12345 , ou seu nome ou informações pessoais. Qualquer um pode tirar proveito dessa falha, e o bot será capaz de obter essas credenciais em um tempo incrivelmente curto.
PROTEJA SEU LOGIN CONTRA
BRUTFORS Brute Force é o tipo mais comum de ataque, que usa vários algoritmos para combinações de nome de usuário e senha de força brutapara adivinhar as credenciais de login. Além disso, um grande número de tentativas de login pode sobrecarregar seu servidor, o que pode resultar em DoS (Denial of Service) e tempo de inatividade para os usuários reais de seu aplicativo.
Os ataques de força bruta levam menos tempo para adivinhar nomes de usuário e senhas simples , mas também podem adivinhar combinações complexas usando ataques de força bruta triviais.
Então, como você protege seu aplicativo Asp.Net de ataques de força bruta?
Aqui estão algumas dicas para evitar ataques de força bruta :
- Use Captcha em sua página de login, porque os bots ainda não conseguem lidar com captchas.
- IP .
- , admin user, .
- , (A-Z a-z), (0-9) (!, @,., #, $,%, ^, &, * ..).
Como implementar as recomendações acima?
As diretrizes acima podem parecer complicadas de implementar para desenvolvedores Asp.Net Core iniciantes , mas não se preocupe, há uma excelente biblioteca HackerSpray para ajudá-lo a proteger seu trabalho de ataques de força bruta . Tudo que você precisa fazer é configurá-lo.
SEMPRE USE IDENTIDADE .NET CORE
Asp.Net Core tem muitas bibliotecas e ferramentas integradas para proteger seus aplicativos. A autorização também tem uma implementação maravilhosa da Microsoft que nos dá total personalização de login e registro de acordo com as melhores práticas de segurança.
2. Transfira dados confidenciais apenas de forma criptografada
Nunca envie explicitamente suas informações confidenciais, como senha ou credenciais de cartão de crédito , para o servidor para verificação. Os hackers podem roubar esses dados interceptando -os antes de enviá-los ao servidor.
Sempre use um algoritmo de hash como md5 ou SHA256 para senhas e algoritmos de criptografia como AES ou DES no lado do cliente, por exemplo, usando jQuery .

3. Lembre-se de limpar os cookies ao sair
Ao fazer o login no aplicativo Asp.Net Core , salvamos alguns dados necessários na Sessão para manter o login do usuário até que ele saia. Em alguns aplicativos, definimos o tempo limite da sessão , e às vezes não, quando o usuário marca a caixa de seleção indicando que deseja permanecer conectado na página de login.
Ao mesmo tempo, o cookie AspNetCore.Session é adicionado ao navegador para rastrear o usuário conectado .
Portanto, ao sairmos, também precisamos excluir os cookies criados por nosso aplicativo do navegador , uma vez que o hackerpode usar essas informações para logins não autorizados. Isso também é chamado de ataque de fixação de sessão .
4. Sempre use SSL
SSL significa Secure Socket Layer . Ele criptografa a comunicação entre cliente e servidor com uma chave muito complexa.
Você pode simplesmente dizer ao Starup.cs do seu aplicativo Asp.Net Core para sempre usar uma política de cookies segura.

5. Nunca armazene dados confidenciais em seu banco de dados explicitamente
Quase todo aplicativo da web para armazenar dados do usuário precisa de um banco de dados , que os hackers atacam na maioria dos casos exatamente para roubar esses dados do usuário. Então, digamos que você armazene as credenciais de seus usuários, como senhas e especificações de faturamento, em seu banco de dados com grande detalhamento e de maneira limpa. Acontece que qualquer pessoa que tenha acesso não autorizado ao seu banco de dados pode usar esses dados para seus próprios fins egoístas.
Portanto, sempre armazene dados confidenciais em seu banco de dados usando hash ou criptografia .

6. Trilhas de auditoria e registro são muito importantes
Trilhas de auditoria ou registros de atividades são muito importantes para se manter atualizado sobre o que está acontecendo em seu aplicativo. Se alguém gerar um grande número de tentativas de login malsucedidas , o administrador deverá receber um e-mail informando sobre isso.
Por exemplo, se um usuário cria uma nova instância de um usuário de aplicativo ou altera as funções de um existente, todas as suas ações devem ser refletidas nos logs de seu aplicativo Asp.net Core .
7. Nunca exponha erros técnicos originais ao usuário final.
Algumas exceções podem revelar informações importantes sobre seu aplicativo ou, às vezes, até mesmo mostrar algumas linhas de código ao usuário final. Os invasores são espertos, eles podem usar as informações fornecidas por sua exceção para hackear seu aplicativo.
Portanto, antes de implantar o aplicativo para produção, certifique-se de ter criado uma página para exibir o erro ao usuário para todos os tipos de exceções e salvou corretamente os erros no log do seu aplicativo.
8. Cross Site Scripting (XSS)
Em ataques XSS (Cross-Site Scripting) , os hackers enviam scripts maliciosos por meio de campos de entrada para roubar credenciais do usuário e outros dados confidenciais.
Digamos que temos um formulário para adicionar um produto a um aplicativo. O hacker adiciona um novo produto e no campo de descrição do produto, ele simplesmente insere um trecho de código JavaScript . Quando nosso aplicativo exibe este produto na página de descrição do produto, o script malicioso do hacker também será executado e receberá os dados de que precisa.
Encontrei a imagem abaixo no artigo XSS no Cloudflare . Isso o ajudará a enviar XSS mais facilmente.
Então, como proteger nosso aplicativo Asp.Net Core de ataques de script entre sites?
Você pode proteger seu aplicativo da web seguindo estas dicas:
- Use expressões regulares tanto do lado do cliente quanto do lado do servidor e armazene apenas dados validados em seu banco de dados .
- A criptografia HTML com Razor ajuda a lidar com esses scripts.
- XXS também pode ser feito com criptografia de URL , portanto, verifique os parâmetros de URL e criptografe-os com UrlEncoder .
Aqui está um ótimo artigo da Microsoft sobre como proteger seu aplicativo contra XSS.
9. Tente ocultar sua versão .Net Core
Em cada resposta HTTP do servidor que recebemos em resposta à nossa solicitação enviada do navegador, sempre há informações sobre a versão em que o aplicativo foi desenvolvido. Essas informações facilitam o trabalho de um invasor , economizando tempo e permitindo que ele direcione uma versão específica do .Net .
É preciso criar mais obstáculos para os hackers e dificultar seu trabalho, ocultando informações sobre a versão do .Net Framework .
Veja como ocultar a versão .Net Core :
- Remova X-Powered-By do cabeçalho de resposta.
- <a
href="https://www.nuget.org/packages/NWebsec.AspNetCore.Middleware/">NWebsec.AspNetCore.Middleware
Instale
AddServerHeader = falsepara remover o servidor: cabeçalho Kestrel.
Você pode remover o X-Powered-By usando este trecho de código simples em seu
web.config
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
10. Falsificação de solicitação entre sites (CSRF)
Você conhece a finalidade do atributo
[ValidateAntiForgeryToken]em suas APIs da Web .Net Core ? Talvez você também tenha notado o código asp-antiforgery="true"em seu cshtmlarquivo?
Primeiro, precisamos entender o CSRF (Cross-Site Request Forgery ou XSRF) e , em seguida, tentaremos entender o propósito da tag e do atributo acima.
Digamos que você esteja usando o e-banking de sua conta bancária para enviar dinheiro a um amigo e, de repente, receba um link do Facebook de uma mulher com um avatar bonito. Quando você abre este link, ele pede que você clique aqui para ganhar $ 1000... Basta clicar e, uma vez que você está logado e autorizado a usar seu e-banking, este link malicioso executa um script e envia dinheiro de sua conta para a conta do hacker.
A imagem abaixo demonstra claramente o CSRF.
Como você pode proteger seu aplicativo contra CSRF?
asp-antiforgery="true"cria um token anti-falsificação e [ValidateAntiForgeryToken]verifica no lado do servidor se o token é válido e protege você contra falsificação de solicitação entre sites .
11. LINQ pode proteger contra injeção de SQL
A injeção de SQL é uma das técnicas mais comumente usadas para prejudicar os dados do usuário por muitos anos.
Nesse método, o hacker coloca alguns caracteres condicionais ou especiais no campo de entrada, o que faz com que toda a solicitação seja modificada.
Aqui está um bom exemplo do que é injeção de SQL .

Como proteger seu aplicativo Asp.Net Core da injeção de SQL?
Aqui estão algumas dicas:
- Usar Entity Framework Core
- Sempre use consultas parametrizadas.
- Sempre valide a entrada do lado do servidor.
- Use procedimentos armazenados.
12. Adicionar cheques durante a desserialização
A desserialização é o oposto da serialização, que é o processo de conversão de um objeto em fluxos de bytes. A serialização é sempre realizada no lado do servidor para transferir ou armazenar objetos, e desserializamos os dados recebidos em nosso aplicativo de várias fontes.

Assim, estamos abertos a muitos fluxos prejudiciais.
Para proteger seu aplicativo de invasores, precisamos validar os dados antes e depois da desserialização.
13. Sempre mantenha as versões atualizadas de suas estruturas e bibliotecas
Sempre atualize as estruturas e bibliotecas usadas em seu projeto. Nunca use bibliotecas desatualizadas em seu projeto, porque os invasores constantemente encontram vulnerabilidades nelas.
Verifique se há atualizações para os pacotes NuGet usados em seu projeto e atualize-os regularmente.

CONCLUSÃO
Nada é 100% seguro, mas devemos tornar nosso aplicativo o mais seguro possível seguindo as melhores práticas. Embora .Net Core seja considerada uma das plataformas mais seguras, ainda precisamos monitorar a atividade em nosso aplicativo e tomar medidas rápidas em caso de qualquer atividade maliciosa.
Obrigado por ler meu artigo, espero que ele motive você a pensar em tornar seu aplicativo Asp.Net Core mais seguro .
Eu ficaria feliz se você gostaria de deixar seus comentários na seção de comentários abaixo.
Aqui estão mais alguns artigos que podem interessar a você:
- SISTEMA DE CONTEÚDO PRINCIPAL ASP.NET FONTE SUPERIOR (CMS)
- CRIANDO PAINÉIS DINÂMICOS DEFINIDOS PELO USUÁRIO USANDO ASP.NET CORE
- USANDO NOSQL DATABASE COM DOTNET CORE EXEMPLO
Saiba mais sobre o curso