Segurança é, na melhor das hipóteses, dificil. É extremamente fácil deixar brechas de segurança durante o desenvolvimento de uma aplicação. Veja neste artigo como HTTP Security Headers pode ajudar teu website.

O desenvolvedor no processo de criação enfrenta diversos desafios. Como arquitetura e design. A comunicação entre os componentes. E não só problemas de ordem técnica como também os problemas de negócio. Entender os requisitos do negócio, desvendar o que o cliente deseja, etc.

A não ser que segurança seja uma feature intrínseca ao negócio, como em caso dos bancos. Ela acaba ficando para segundo plano.

Ao tentar proteger uma aplicação ou website há muitos pontos para considerar, mas definitavamente um bom ponto de partida é explorar os HTTP Security Headers.


Same Origin Policy

A Web baseia-se num conceito conhecido como Same-Origin Policy (Politica de mesma origem).

Em teoria os dados do website http://site-confiavel.com.br só pode ser acessado por ele mesmo. Com isso o site http://outro-site.com.br não consegue acessar as informações do site http://site-confiavel.com.br, protegendo assim Cookies, localstorage e etc. Na teoria isso é bonito e infálivel, mas na prática não é bem assim.

Ataque XSS, por exemplo, são uma forma de burlar o Same-Origin Policy. Basta acessar o site do Owasp e ver a quantidade de ataques possiveis a esta diretiva. Permitindo acesso a dados de outro website pelo invasor.

Security Headers

Os HTTP Security Headers são relativamente fáceis de implementar e fornecem uma boa camada de segurança para os tipos de ataques mais comuns contra páginas web.

Ajudam a mitigar ataques e vulnerabilidades de segurança como XSS, code injection, clickjacking etc.

Quando um usuário visita um site, o navegador envia a requisição ao servidor que responde com headers HTTP. Esses cabeçalhos dizem ao navegador como se comportar durante a navegação no site.

Portanto implementar security headers basta manipular a resposta que vem do servidor que o browser irá acatar, adicionando assim, uma camada a mais de segurança.

Cross Site Scripting Protection (X-XSS)

O ataques de XSS explora a incapacidade do navegador distinguir os scripts que são do site http://site-confiavel.com.br de outros que foram injetados de forma maliciosa pelo atacante. Dessa forma o navegador baixa e executa todo o código, sem considerar a fonte.

Colocando o header X-XSS-Protection, na resposta do servidor. Indica para o browser que ao identificar código malicioso deve descarta-lo.

As opções são:

Valor Descrição
0 Desabilita o filtro de XSS
1 Habilita o filtro de XSS. Se o browser detectar um código malicioso, irá remover e continuar o carregamento
1; mode=block Habilita o filtro, mas ao invés de remover o código malicioso o browser irá parar de carregar o conteúdo.

Content Security Policy (CSP)

Pode ser considerado uma versão melhorada do X-XSS-Protection. O CSP usa o cabeçalho Content-Security-Policy. Com esse header o servidor cria uma white list de fontes com conteúdo confiável. Instruindo o navegador a executar ou renderizar recursos somente dessas fontes.

csp-browsers

A maioria dos browsers suporta esta feature. As opções são diversas. Abaixo há referências para aqueles que quiserem se aprofundar. Haverá um próximo post detalhando um pouco de suas funcionalidades.

HTTP Strict Transport Security (HSTS)

Restringe o navegador a acessar o site apenas por HTTPS. Isso garante que a conexão não será estabelecida por meio de uma conexão HTTP insegura.

valor descrição
max-age=<expire-time> O tempo, em segundos, que o navegador deverá guardar a informação de que o site só pode ser acessado usando HTTPS.
includeSubDomains (Optional) Se especificado, esta regra também será aplicada a todos os subdomínios.

X-Frame-Options

O header x-frame-options previne o ataque conhecido como clickjacking, desativando iframes no seu site. Os iframes podem ser usados para carregar sites maliciosos.

Esta técnica consiste em enganar o usuário sobre o site do qual ele realmente está, através do iframe.

Opções:

valor descrição
deny Desabilita iframe completamente
sameorigin Permite apenas iframes do mesmo dominio
allow-from Permite iframes de um dominio especifico

X-Content-Type-Options

O header X-Content-Type-Options previne o ataque conhecido como MIME Sniff. Ele instrui ao browser validar o MIME type indicado no header.

X-Content-Type-Options: nosniff

Bloquea a solicitação se o tipo solicitado for

  • "style" e o tipo MIME não é "text/css"
  • "script" e o tipo MIME não é um tipo MIME JavaScript.

Implementação

A implementação no ASP.NEt é muito simples. Para começar a proteger uma aplicação basta seguir uma das opções:

  • ASP.NET Core - startup.cs
  • Diretamente no web.config

PS: Há outras maneiras para adicionar, como a biblioteca NWebSec, diretamente pelo IIS entre outras.

Referencias