ASP.NET
Core -
10 práticas para segurança em
aplicações MVC - II
![]() |
Hoje vou apresentar 10 dicas úteis que podemos usar para tornar mais seguras as aplicações ASP .NET Core MVC. |
Continuando a primeira parte do artigo veremos mais 5 dicas para melhorar a segurança da sua aplicação web.
6- Aplicar SSL (Secure Sockets Layer) e HSTS
O que é SSL?
A sigla
SSL significa Secure Sockets Layer e estabelece uma conexão segura ou
criptografada entre o cliente e o servidor. Com SSL, as requisições passadas
entre o navegador do cliente e o servidor, e as respostas do servidor para o
navegador do cliente, serão criptografadas para manter a integridade dos
dados.
Portanto devemos usar HTTPS (HyperText Transfer Protocol
Secure) para proteger seu aplicativo ASP.NET Core.
Na ASP.NET Core , podemos criar facilmente um aplicativo configurado por HTTPS.
Uma opção para configurar o HTTPS está disponível ao selecionar o modelo de aplicativo web no Visual Studio bastando marcar a opção : Configure for HTTPS
O que é
HSTS (HTTP Strict Transport Security)?
HSTS é uma política de segurança da web que protege seu aplicativo da web contra
ataques de protocolo de downgrade e sequestro de cookies. Ele força o
servidor da web a se comunicar por meio de uma conexão HTTPS e sempre rejeita
conexões HTTP inseguras.
O template ASP.NET Core, por padrão, adiciona o middleware HSTS. Ele não é
recomendado para uso no ambiente de desenvolvimento, pois o navegador armazena
em cache o cabeçalho HSTS.
Podemos substituir algumas opções ao configurar o HSTS.
Exemplo:
services.AddHsts(options => { options.IncludeSubDomains = true; options.Preload = true; options.MaxAge = TimeSpan.FromHours(100); options.ExcludedHosts.Add("testedomain.com"); });; |
7- Ataque XXE (XML External Entity)
Se seu aplicativo usa lógica para analisar um arquivo XML carregado por um usuário final, você corre o risco de um ataque XXE (XML External Entity).
Nesse tipo de ataque, um parse XML com configuração fraca processa uma entrada XML que contém código XML malicioso ou uma referência a uma entidade externa. Esse tipo de ataque pode causar um ataque de negação de serviço ao injetar entidades dentro de entidades, o que torna a utilização do servidor muito alta, resultando no desligamento do servidor. Esse tipo de ataque também é conhecido como “ataque de um bilhão de risadas”.
Para prevenir este ataque podemos adotar as seguintes práticas:
- Se usarmos
XmlTextReader para analisar arquivos XML, devemos
definir a propriedade DtdProcessing como
Prohibit ou Ignore.
- Se for definido como Prohibit, uma exceção será
lançada se um DTD (Definição de Tipo de Documento)
for identificado.
- Se for definido como Ignore, qualquer especificação de DTD no documento será
ignorada e o processamento do documento continuará.
- Se definirmos como Parse, ele analisará todas as
especificações DTD no documento. DtdProcessing é
definido como Parse por padrão sendo potencialmente
vulnerável.
8- Autenticação imprópria e gerenciamento de sessão
A maioria das
aplicações web tem um módulo de autenticação e devemos ter cuidado ao escrever o
código para ele. Podemos cometer erros, como não remover os cookies de
autenticação após um logout bem-sucedido. Esse tipo de erro permite que
os invasores roubem as credenciais do usuário, como cookies e valores de
sessão, e pode fazer com que os invasores consigam acessar o aplicativo e
causar grandes impactos negativos.
Os seguintes erros podem ajudar os invasores a roubar dados:
Para evitar esses erros faça o seguinte :
A seguir um exemplo de código para remover valores da sessão e os cookies de autenticação (.AspNetCore.Session) após o logout do usuário :
//Remove a session HttpContext.Session.Clear(); //Remove os cookies CookieOptions option = new CookieOptions(); if(Request.Cookies[".AspNetCore.Session"] != null) { option.Expires = System.DateTime.Now.AddDays(-1); Response.Cookies.Append("MyApplication.Session", "", option); } |
Para definir
HttpOnly nos cookies use o seguinte código:
CookieOptions option = new CookieOptions {Expires =
DateTime.Now.AddHours(24), HttpOnly = true};
O sinalizador HttpOnly é usado para definir qualquer cookie e não pode ser acessado a partir de scripts do lado do cliente.
Para configurar HttpOnly globalmente, configure o método UseCookiePolicy em Startup.cs conforme o código a seguir:
app.UseCookiePolicy(new CookiePolicyOptions { HttpOnly = HttpOnlyPolicy.Always, Secure = CookieSecurePolicy.Always, MinimumSameSitePolicy = SameSiteMode.None }); |
9- Exposição de dados confidenciais e trilha
de auditoria
Sempre gerenciamos os dados pessoais importantes de um usuário em aplicativos da
web, e , existem muitos lugares em uma aplicação onde podemos expor e armazenar
dados confidenciais como se fossem informações comuns, ou proteger adequadamente
algumas, mas não todas as informações confidenciais sem perceber. Se os
invasores puderem acessar dados confidenciais que ignoramos, eles os usarão de
maneira indevida.
Podemos adotar os seguintes procedimentos para evitar isso:
Trilha de auditoria
É uma prática recomendada manter o monitoramento dos registros de atividade
de sua aplicação web em produção em intervalos regulares. Podemos configurar os
logs a serem coletados usando logs do IIS ou podemos armazenar nossos logs em
arquivos de texto ou bancos de dados.
Com base nos logs, podemos reunir insights sobre quaisquer erros ou problemas de desempenho na aplicação de produção e, também, se alguém tentar atacar o aplicativo, podemos identificar suas tentativas.
10- Validação no Upload de arquivos
Se a sua aplicação
web tiver um controle de upload de arquivos, os
invasores terão a chance de fazer upload de arquivos de script
mal-intencionados que causam problemas. Portanto, a validação adequada do
arquivo é sempre necessária.
A principal validação que fazemos em arquivos é validar a extensão do arquivo.
No entanto, os invasores podem alterar a extensão de seu arquivo e enviá-lo de
qualquer maneira.
Por exemplo, se
você permitir apenas arquivos de imagem, um invasor pode salvar seu arquivo de
script com uma extensão .jpeg e enviá-lo.
Neste caso, a validação da extensão do arquivo aceita o arquivo porque o
considera um arquivo de imagem, embora seja realmente um arquivo de script
malicioso.
Como fazer a validação adequada ?
Concluímos assim as dez dicas para ajudar a tornar a sua aplicação ASP .NET Core MVC mais segura.
"Se o SENHOR não edificar a casa, em vão trabalham os
que a edificam; se o SENHOR não guardar a cidade, em vão vigia a sentinela."
Salmos 127:1
Referências:
ASP .NET Core 2 - MiniCurso Básico
ASP .NET Core MVC - CRUD básico com ADO .NET
ASP .NET Core - Implementando a segurança com
ASP .NET Core - Iniciando com ASP .NET Core MVC e
ASP .NET Core MVC - Criando um site com MySql e EF
ASP .NET Core - Gerenciador de Despesas Pessoais com
Minicurso ASP .NET Core 2.0 - Apresentando MVC - YouTube
ASP .NET Core - Configurando o ambiente de .
ASP .NET Core e EF Core - Configurando o ambiente
ASP .NET Core - Como configurar o AutoMapper