🚀 Capítulo 14: Testes de Segurança (Tema: Batman)

NOTE

Este capítulo utiliza a temática de Batman para explicar os Testes de Segurança. Defender a Batcaverna exige pensar como o Coringa: tente invadir seu próprio sistema para descobrir as fraquezas!


1. 🎯 Objetivo da Aula

Compreender o conceito de Testes de Segurança, conhecendo as principais vulnerabilidades da web (como SQL Injection) e aprendendo a proteger o sistema contra invasores.

2. 🏢 O Cenário Prático (Seu Desafio)

A Batcaverna é o lugar mais secreto e seguro de Gotham. Mas o Batman não confia apenas na sorte.

  • Ele mesmo tenta hackear o Batcomputador (Teste de Invasão ou Pentest).
  • Ele tenta ver se o Coringa conseguiria entrar digitando comandos estranhos na porta de entrada.

No software, o Teste de Segurança verifica se existem “portas abertas” que permitam que pessoas mal-intencionadas roubem dados ou derrubem o sistema. Seu desafio é ser o Batman e proteger a Batcaverna digital!

3. 🧠 Fundamentos: A Teoria Traduzida

Os Testes de Segurança avaliam a vulnerabilidade do sistema contra ataques externos e internos, garantindo a confidencialidade e a integridade dos dados.

🚨 As 3 Falhas Mais Comuns (OWASP Top 10):

  1. SQL Injection (Injeção de SQL):
    • O que é: O invasor digita comandos de banco de dados no campo de busca ou login (Ex: ' OR 1=1 --).
    • O risco: Ele pode pular o login ou apagar o banco de dados inteiro!
  2. Quebra de Autenticação:
    • O que é: Senhas fracas, falta de limite de tentativas de login ou salvar senhas sem criptografia.
  3. Exposição de Dados Sensíveis:
    • O que é: Mostrar dados do cartão de crédito ou CPF na URL ou em arquivos de log que qualquer um pode ler.

4. 📖 Exemplo Guiado: O Golpe do SQL Injection

Imagine um campo de login onde o programador não limpou os dados que o usuário digita.

Código Vulnerável:

// O sistema apenas junta o que o usuário digitou na consulta do banco
let query = "SELECT * FROM usuarios WHERE login = '" + usuarioDigitado + "'";

Se o Coringa digitar no campo de usuário: ' OR 1=1 -- A consulta no banco ficará assim:

SELECT * FROM usuarios WHERE login = '' OR 1=1 --'

Como 1=1 é sempre verdadeiro, o banco de dados vai retornar o primeiro usuário da tabela (geralmente o administrador) e o Coringa entrará no sistema sem saber a senha!


5. 🛠️ Prática Obrigatória 1: Identificando a Falha

Diga qual falha de segurança está ocorrendo em cada caso (SQL Injection, Quebra de Autenticação ou Exposição de Dados):

  1. O sistema permite que o usuário tente digitar a senha 1.000.000 de vezes seguidas sem bloquear a conta.
  2. Ao digitar um comando estranho na busca do site, a tela mostra um erro do banco de dados revelando o nome das tabelas.
  3. O link para baixar o boleto do cliente contém o CPF dele escrito diretamente na URL: site.com/boleto?cpf=12345678900.

6. 🛠️ Prática Obrigatória 2: Hacker Ético

Qual a diferença entre um Hacker Mal-intencionado (Black Hat) e um Hacker Ético (White Hat)? Por que as empresas contratam hackers éticos para atacar seus próprios sistemas?


7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 14 Qualidade) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

mod_11_qualidade_e_testes_de_software/
├── capitulos/
│   ├── capitulo_14_seguranca.md
│   └── codigos/
│       └── cap14/
│           └── seguranca_teste.js

💡 Checkpoint de Lógica

Para evitar SQL Injection, NUNCA junte textos digitados pelo usuário direto na consulta SQL. Use sempre Prepared Statements (consultas preparadas), onde o próprio banco de dados limpa os dados perigosos.

10. 🔥 Desafio de Fixação

Pesquise sobre o projeto OWASP (Open Web Application Security Project) e veja quais são as 10 maiores vulnerabilidades da web atualmente.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. Quebra de Autenticação (Permite ataque de força bruta).
  2. SQL Injection (Revelando estrutura do banco).
  3. Exposição de Dados (CPF visível na URL).

Capitulo Anterior | Proximo Capitulo