Nesta aula, vamos explorar os mecanismos de segurança que protegem os usuários e as aplicações web contra ataques maliciosos. A segurança de browsers e web é um campo crítico, pois grande parte das interações digitais ocorre através de navegadores. Compreender conceitos como same-origin policy, CSP, cookies e as vulnerabilidades XSS e CSRF é essencial para qualquer profissional de segurança da informação.

Vamos começar com a política de mesma origem, que é a base do modelo de segurança dos navegadores, e depois avançar para mecanismos de defesa como CSP e práticas seguras com cookies. Por fim, analisaremos ataques comuns e como preveni-los.

Same-origin policy

A same-origin policy (política de mesma origem) é uma medida de segurança crítica implementada por navegadores. Ela restringe como um documento ou script carregado de uma origem pode interagir com recursos de outra origem. Uma origem é definida pela combinação de protocolo, domínio e porta.

Por exemplo, uma página em https://site.com não pode ler o conteúdo de uma página em https://outro.com devido a essa política. Isso impede que scripts maliciosos acessem dados sensíveis de outros sites. No entanto, há exceções controladas, como o uso de CORS (Cross-Origin Resource Sharing) e JSONP.

Origem A: https://exemplo.com:443/pagina.html
Origem B: https://exemplo.com:8080/outro.html -> DIFERENTE (porta)
Origem C: http://exemplo.com/pagina.html -> DIFERENTE (protocolo)

Entender a same-origin policy é fundamental para compreender como ataques como XSS e CSRF exploram violações dessa política.

CSP

Content Security Policy (CSP) é uma camada adicional de segurança que ajuda a detectar e mitigar ataques como XSS e injeção de dados. O CSP permite que desenvolvedores definam quais fontes de conteúdo são confiáveis, restringindo a execução de scripts não autorizados.

O CSP é implementado através do cabeçalho HTTP Content-Security-Policy ou da tag <meta>. Por exemplo, uma política pode permitir apenas scripts do próprio domínio e bloquear scripts inline.

Content-Security-Policy: default-src 'self'; script-src 'self' https://apis.google.com

Isso impede que um atacante injete scripts maliciosos, pois o navegador bloqueará qualquer script que não esteja na lista de permissões. CSP também oferece diretivas para estilos, imagens, fontes, etc.

Cookies

Cookies são pequenos arquivos armazenados no navegador do usuário, usados para manter estado, como sessões de login. No entanto, cookies podem ser alvos de ataques se não forem configurados corretamente. Atributos de segurança como Secure, HttpOnly e SameSite são cruciais.

  • Secure: o cookie só é enviado em conexões HTTPS.
  • HttpOnly: impede que o cookie seja acessado por JavaScript, mitigando XSS.
  • SameSite: controla o envio do cookie em requisições cross-site, prevenindo CSRF.
Set-Cookie: sessionId=abc123; Secure; HttpOnly; SameSite=Lax

O atributo SameSite pode ser Strict, Lax ou None. Strict não envia o cookie em requisições iniciadas por sites terceiros, enquanto Lax permite em navegação top-level (como clicar em um link).

XSS e CSRF

XSS (Cross-Site Scripting) é uma vulnerabilidade que permite a um atacante injetar scripts maliciosos em páginas web visualizadas por outros usuários. Existem três tipos: armazenado, refletido e DOM-based. A prevenção inclui validação e sanitização de entradas, uso de CSP e escape de saída.

CSRF (Cross-Site Request Forgery) força um usuário autenticado a executar ações indesejadas em uma aplicação web. Por exemplo, um atacante pode criar um link que, quando clicado por um usuário logado, transfere dinheiro. A prevenção envolve tokens anti-CSRF, cookies com SameSite e verificação de cabeçalhos de origem.

// Exemplo de token CSRF em formulário
<input type="hidden" name="csrf_token" value="token_unico" />

Ambas as vulnerabilidades são comuns e podem ser mitigadas com boas práticas de desenvolvimento e configurações de segurança.

Boas práticas

  • Implemente CSP rigoroso e teste com relatórios.
  • Configure cookies com Secure, HttpOnly e SameSite.
  • Use tokens CSRF em formulários e requisições sensíveis.
  • Valide e sanitize sempre as entradas do usuário.
  • Mantenha bibliotecas e frameworks atualizados.

Exercícios

  1. Explique como a same-origin policy impede um ataque XSS simples.
  2. ✓ Resposta: A same-origin policy impede que um script malicioso de um site atacante acesse o conteúdo de outro site. No XSS, o script injetado roda na origem do site vulnerável, então ele pode acessar dados dessa origem, mas não de outras origens. A política limita o dano, mas não impede o XSS em si.
  3. Qual a diferença entre CSP e same-origin policy?
  4. ✓ Resposta: A same-origin policy é uma regra nativa do navegador que restringe interações entre origens diferentes. CSP é uma política configurável pelo servidor que permite ao desenvolvedor definir regras mais específicas sobre quais recursos podem ser carregados e executados, indo além da mesma origem.
  5. Por que o atributo HttpOnly é importante para cookies?
  6. ✓ Resposta: HttpOnly impede que o cookie seja acessado por JavaScript, o que mitiga ataques XSS que tentam roubar cookies de sessão. Mesmo que um script malicioso seja injetado, ele não conseguirá ler o cookie.
  7. Como um token CSRF previne ataques?
  8. ✓ Resposta: Um token CSRF é um valor único e imprevisível gerado pelo servidor e incluído em formulários ou requisições. O servidor verifica se o token enviado corresponde ao token esperado para aquela sessão. Como o atacante não conhece o token, ele não pode forjar requisições.
  9. Cite três medidas para mitigar XSS.
  10. ✓ Resposta: 1. Validar e sanitizar entradas do usuário. 2. Usar CSP para restringir fontes de scripts. 3. Escapar saída (ex: converter < > em entidades HTML).

Referências