LUIS FELIPE FACHINI E MAX MAUL
Este projeto implementa uma API RESTful para gerenciamento de usuários, com foco em segurança da informação. O projeto inclui duas versões no mesmo repositório:
- Versão 1.0: Vulnerável a ataques comuns como SQL/NoSQL Injection, XSS e CSRF
- Versão 2.0: Versão segura com proteções implementadas contra esses ataques
- Node.js (v14 ou superior)
- MongoDB (local ou MongoDB Atlas)
- NPM ou Yarn
- Clone este repositório:
git clone https://github.com/seu-usuario/projeto-n2-seguranca.git
cd projeto-n2-seguranca- Instale as dependências:
npm install
# ou
yarn install- Crie um arquivo
.envna raiz do projeto com as seguintes variáveis:
MONGODB_URI=mongodb://localhost:27017/seguranca-api
PORT=3000
JWT_SECRET=sua_chave_secreta_jwt_aqui_mude_para_producao
NODE_ENV=development
# Iniciar o servidor
npm start
# ou
npm run dev # com nodemon para desenvolvimentoO servidor estará rodando em http://localhost:3000 e as APIs estarão disponíveis nos seguintes endpoints:
- API Vulnerável:
http://localhost:3000/api/v1 - API Segura:
http://localhost:3000/api/v2
projeto-n2/
├── src/
│ ├── v1-vulneravel/ # Versão 1.0 (Vulnerável)
│ │ ├── controllers/
│ │ │ └── userController.js
│ │ ├── routes/
│ │ │ └── users.js
│ │ └── app.js
│ │
│ ├── v2-segura/ # Versão 2.0 (Segura)
│ │ ├── controllers/
│ │ │ ├── authController.js
│ │ │ └── userController.js
│ │ ├── middleware/
│ │ │ ├── auth.js
│ │ │ └── validation.js
│ │ ├── routes/
│ │ │ ├── auth.js
│ │ │ └── users.js
│ │ └── app.js
│ │
│ ├── config/ # Configurações compartilhadas
│ │ └── database.js
│ │
│ └── models/ # Modelos compartilhados
│ └── User.js
│
├── tests/ # Testes de penetração
│ ├── pentest-injection.js
│ ├── pentest-xss.js
│ └── pentest-csrf.html
│
├── app.js # Ponto de entrada principal
├── package.json
├── .env
└── .gitignore
GET /api/v1/users- Listar todos os usuáriosGET /api/v1/users/:id- Obter um usuário por IDPOST /api/v1/users- Criar um novo usuárioPUT /api/v1/users/:id- Atualizar um usuárioDELETE /api/v1/users/:id- Excluir um usuárioPOST /api/v1/login- Login de usuário (vulnerável)
POST /api/v2/auth/register- Registrar um novo usuárioPOST /api/v2/auth/login- Login de usuário (seguro, retorna JWT)
GET /api/v2/users- Listar todos os usuáriosGET /api/v2/users/:id- Obter um usuário por IDPUT /api/v2/users/:id- Atualizar um usuário (requer autenticação)DELETE /api/v2/users/:id- Excluir um usuário (requer autenticação)
POST /api/v1/users
Content-Type: application/json
{
"username": "usuario_teste",
"email": "usuario@exemplo.com",
"password": "senha123"
}
POST /api/v1/login
Content-Type: application/json
{
"username": "usuario_teste",
"password": "senha123"
}
POST /api/v1/login
Content-Type: application/json
{
"username": {"$gt": ""},
"password": {"$gt": ""}
}
POST /api/v2/auth/register
Content-Type: application/json
{
"username": "usuario_seguro",
"email": "seguro@exemplo.com",
"password": "Senha@123"
}
POST /api/v2/auth/login
Content-Type: application/json
{
"username": "usuario_seguro",
"password": "Senha@123"
}
PUT /api/v2/users/:id
Content-Type: application/json
Authorization: Bearer seu_token_jwt_aqui
X-CSRF-Token: seu_token_csrf_aqui
{
"email": "novo_email@exemplo.com"
}
O projeto inclui scripts para testar as vulnerabilidades da versão 1.0:
node tests/pentest-injection.jsnode tests/pentest-xss.jsAbra o arquivo tests/pentest-csrf.html em um navegador enquanto estiver logado na aplicação.
- Vulnerabilidade: Consultas diretas ao banco de dados sem sanitização
- Correção: Uso de consultas parametrizadas e validação de entrada
- Vulnerabilidade: Dados de entrada não sanitizados são renderizados no cliente
- Correção: Sanitização de entrada, uso do middleware
xss-clean, cabeçalhos CSP
- Vulnerabilidade: Ausência de tokens CSRF para validar requisições
- Correção: Implementação de tokens CSRF e validação em rotas sensíveis
- Autenticação JWT: Implementação de JSON Web Tokens para autenticação segura
- Proteção de Rotas: Middleware de autenticação para proteger rotas sensíveis
- Criptografia de Senhas: Uso de bcrypt para hash e salt de senhas
- Validação de Entrada: Validação e sanitização de todos os dados de entrada
- Cabeçalhos de Segurança: Uso do Helmet para configurar cabeçalhos HTTP de segurança
- Limitação de Taxa: Proteção contra ataques de força bruta
- Tokens CSRF: Proteção contra ataques CSRF em rotas sensíveis
Projeto desenvolvido para a disciplina de Segurança da Informação (N2) - Prof. Claudinei Dias (Ney).