🚀 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):
- 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!
- O que é: O invasor digita comandos de banco de dados no campo de busca ou login (Ex:
- Quebra de Autenticação:
- O que é: Senhas fracas, falta de limite de tentativas de login ou salvar senhas sem criptografia.
- 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):
- O sistema permite que o usuário tente digitar a senha 1.000.000 de vezes seguidas sem bloquear a conta.
- Ao digitar um comando estranho na busca do site, a tela mostra um erro do banco de dados revelando o nome das tabelas.
- 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)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 14 Qualidade) e clique em Commit to main. - 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:
- Quebra de Autenticação (Permite ataque de força bruta).
- SQL Injection (Revelando estrutura do banco).
- Exposição de Dados (CPF visível na URL).