Os aplicativos da web atuais são vulneráveis ​​a uma variedade de ameaças à segurança. Portanto, você deve ter estratégias para proteger seus dados e proteger seu aplicativo contra ataques. Proteger a sua aplicação requer uma abordagem proativa combinada com a implementação das melhores práticas recomendadas, conforme discutido neste artigo.

Este artigo examina seis estratégias que você pode adotar para proteger seus aplicativos Web, aproveitando as proteções disponíveis no ASP.NET Core. Para usar os exemplos de código ilustrativos fornecidos neste artigo, você deve ter o Visual Studio 2022 instalado em seu sistema. Se ainda não tiver uma cópia, você pode baixar o Visual Studio 2022 aqui.

Crie um projeto MVC do ASP.NET Core Web App no ​​Visual Studio 2022

Para criar um projeto de API Web ASP.NET Core no Visual Studio 2022, siga as etapas descritas abaixo.

  1. Inicie o IDE do Visual Studio 2022.
  2. Clique em “Criar novo projeto”.
  3. Na janela “Criar novo projeto”, selecione “ASP.NET Core Web App (Model-View-Controller)” na lista de modelos exibidos.
  4. Clique em Avançar.
  5. Na janela “Configure seu novo projeto”, especifique o nome e o local do novo projeto. Opcionalmente, marque a caixa de seleção “Colocar solução e projeto no mesmo diretório”, dependendo de suas preferências.
  6. Clique em Avançar.
  7. Na janela “Informações adicionais” mostrada a seguir, selecione “.NET 8.0 (Long Term Support)” como a versão da estrutura e desmarque a caixa de seleção que diz “Usar controladores”, pois usaremos APIs mínimas neste projeto.
  8. Em outra parte da janela “Informações Adicionais”, deixe o “Tipo de Autenticação” definido como “Nenhum” (o padrão) e certifique-se de que as caixas de seleção “Ativar Suporte Open API”, “Configurar para HTTPS”, “Não usar nível superior instruções” e “Ativar Docker” permanecem desmarcados. Não usaremos nenhum desses recursos aqui.
  9. Clique em Criar.

Usaremos este projeto MVC do ASP.NET Core Web App para ilustrar o uso dos recursos de segurança integrados do ASP.NET Core nas seções abaixo.

Aplicar HTTPS no ASP.NET Core

SSL, ou Secure Sockets Layer, é um protocolo que facilita a comunicação segura entre clientes e servidores em uma rede, permitindo que a comunicação seja criptografada. Você pode impor o uso de HTTPS para proteger seu aplicativo redirecionando solicitações HTTP para HTTPS.

O trecho de código a seguir mostra como você pode configurar a segurança HTTPS para seu aplicativo no arquivo Program.cs.

builder.Services.AddHttpsRedirection(options =>
{
    options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;
    options.HttpsPort = 443;
});

Use segurança de transporte estrito HTTP no ASP.NET Core

HTTP Strict Transport Security, ou HSTS, evita ataques de downgrade de protocolo e sequestro de cookies, garantindo que o servidor web se comunique usando uma conexão HTTPS e bloqueando todas as conexões HTTP inseguras. Observe que o mecanismo de tempo de execução do ASP.NET Core adiciona o middleware HSTS por padrão.

O trecho de código a seguir ilustra como podemos aproveitar esse middleware para impor essa restrição de segurança.

services.AddHsts(options =>
{
   options.IncludeSubDomains = true;
   options.MaxAge = TimeSpan.FromDays(7);
});

Evite ataques de falsificação de solicitação entre sites no ASP.NET Core

Ataques de falsificação de solicitação entre sites (CSRF) induzem um usuário a realizar atividades maliciosas enquanto ele está conectado a um aplicativo. Esses ataques são mais comumente realizados enganando os usuários com e-mails de phishing para atraí-los para sites maliciosos, onde usam os privilégios de um usuário autenticado para roubar fundos da conta bancária da vítima, por exemplo, ou fazer compras online usando o cartão de crédito da vítima.

Você pode proteger os usuários do seu aplicativo ASP.NET Core contra ataques CSRF usando tokens antifalsificação. Quando você inclui tokens antifalsificação em seu aplicativo, dois valores diferentes são enviados ao servidor com cada POST. Um dos valores é enviado como cookie do navegador e o outro é enviado como dados de formulário. A menos que o servidor receba ambos os valores, ele se recusará a permitir que a solicitação prossiga.

Para usar tokens antifalsificação em seu aplicativo ASP.NET Core, inclua-os no arquivo Program.cs conforme mostrado no trecho de código fornecido abaixo.

builder.Services.AddAntiforgery(options =>
{
    options.FormFieldName = "ThisIsAnAntiForgeryField";
    options.HeaderName = "ThisIsAnAntiForgeryHeader";
    options.Cookie.Name = "ThisIsAnAntiForgeryCookie";
});

Impedir scripts entre sites no ASP.NET Core

Cross-site scripting (XSS) refere-se ao ato de injetar um script malicioso usando campos de entrada ou formulário de uma página da web em seu aplicativo, com a intenção de roubar dados confidenciais, como credenciais de login ou cookies. Quando um invasor deseja lançar um ataque XSS, ele geralmente envia um link malicioso a um usuário e, em seguida, tenta induzir a pessoa a clicar no link. Você pode impedir scripts entre sites usando codificação de URL, codificação HTML e expressões regulares para validar e limpar entradas.

Impedir a injeção de SQL no ASP.NET Core

A injeção de SQL é uma grande preocupação de segurança. A injeção de SQL ocorre quando um invasor insere comandos SQL maliciosos em suas consultas SQL criadas dinamicamente. Tais ataques são possibilitados por vulnerabilidades de segurança em consultas a bancos de dados, levando à exposição de informações confidenciais. Você pode impedir a injeção de SQL usando procedimentos armazenados e consultas parametrizadas em vez de consultas SQL dinâmicas e validando a entrada do usuário para remover caracteres potencialmente maliciosos.

Crie páginas de erro personalizadas no ASP.NET Core

Se você não implementar o código de tratamento de erros adequado em seu aplicativo, poderá expor inadvertidamente informações confidenciais, como dados de configuração, nomes de tabelas ou até mesmo números de segurança social. Para evitar isso, você pode implementar uma página da Web de erro personalizada em seu aplicativo para que, sempre que ocorrer um erro, a página personalizada exiba mensagens de erro seguras em vez das mensagens de erro potencialmente comprometedoras que seu aplicativo pode gerar.

Além da página da web de erro personalizada, você deve criar um filtro de exceção personalizado estendendo a classe ExceptionFilterAttribute e substituindo o método OnException. O snippet de código abaixo mostra como redirecionar a rota para a página da web de erro personalizada quando ocorre um erro.

var result = new RedirectToRouteResult(
new RouteValueDictionary
{
    {"controller", "Error"}, {"action", "MyCustomError"}
});

Por fim, escreva o seguinte trecho de código no arquivo Program.cs para registrar o manipulador de exceções no pipeline de processamento de solicitação.

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/MyCustomError");
}

A proteção de aplicativos envolve tudo, desde garantir configurações adequadas até impedir a exposição de dados confidenciais. As seis melhores práticas descritas acima são apenas um começo. Para evitar a exposição de dados confidenciais, você deve usar não apenas HTTPS, mas também criptografar os dados em repouso e evitar armazenar dados confidenciais de forma não criptografada em um banco de dados ou em qualquer lugar do aplicativo.

Você também deve monitorar rotineiramente os logs de atividades gerados pelo seu aplicativo. Examinar os logs pode fornecer insights sobre segurança, desempenho e outros problemas em seu aplicativo.