https://github.com/denisfreitas999/devsecops-lsp-test
PoC: servidor Node.js com violações LGPD intencionais para testes de um LSP DevSecOps
https://github.com/denisfreitas999/devsecops-lsp-test
compliance devsecops lei-geral-de-protecao-de-dados lgpd lsp nodejs poc privacy security sequelize
Last synced: about 11 hours ago
JSON representation
PoC: servidor Node.js com violações LGPD intencionais para testes de um LSP DevSecOps
- Host: GitHub
- URL: https://github.com/denisfreitas999/devsecops-lsp-test
- Owner: denisfreitas999
- License: other
- Created: 2025-10-27T18:24:58.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2026-06-17T17:32:40.000Z (20 days ago)
- Last Synced: 2026-06-17T19:23:55.749Z (20 days ago)
- Topics: compliance, devsecops, lei-geral-de-protecao-de-dados, lgpd, lsp, nodejs, poc, privacy, security, sequelize
- Language: JavaScript
- Homepage: https://ri.ufs.br/handle/riufs/24499
- Size: 57.6 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 🔐 devsecops-lsp-test
> **Prova de Conceito (PoC)** — Servidor de teste para validação de um Language Server Protocol (LSP) com foco em conformidade LGPD/DevSecOps.
---
## 📋 Sobre o Projeto
Este repositório contém uma API Node.js propositalmente construída com **violações de segurança e privacidade** para servir como ambiente de testes de um servidor LSP customizado. O objetivo é validar se o LSP consegue detectar, em tempo real no editor, padrões de código que violam requisitos não funcionais (RNFs) relacionados à **LGPD** e boas práticas de **DevSecOps**.
A aplicação simula um sistema de gestão de pacientes de uma clínica médica — um domínio sensível que envolve dados pessoais e dados de saúde.
---
## 🎯 Objetivo da PoC
Verificar a capacidade do servidor LSP de detectar e sinalizar as seguintes categorias de violações:
| Código | Categoria | Descrição |
|--------|-----------|-----------|
| `RNF-07-A` | Logging de Dado Pessoal/Sensível | `console.log/warn` expondo CPF ou histórico médico |
| `RNF-07-B` | Uso de Dado Sensível de Saúde | Acesso e manipulação direta de `historico_medico` |
| `RNF-07-C` | Transmissão Insegura de Dados | Envio de payload completo com dados pessoais para APIs externas |
| `RNF-07-D` | Upload de Dados Sensíveis | `FormData.append()` com campos pessoais desnecessários |
| `RNF-07-E` | Exfiltração via E-mail/Mensageria | Corpo de e-mail contendo CPF e dados de saúde |
| `RNF-07-F` | Armazenamento Inseguro em Arquivo | `fs.writeFileSync` gravando dados pessoais em texto plano |
| `RNF-07-G` | Serialização Insegura | `JSON.stringify` em objetos contendo dados pessoais sem mascaramento |
| `RNF-08` | Protocolo Inseguro (HTTP) | URLs `http://` transmitindo dados sensíveis sem criptografia |
| `RNF-12-A` | Exclusão Insegura (Hard Delete) | `destroy()` com critério baseado em CPF sem auditoria adequada |
| `RNF-12-B` | Eliminação de Arquivo Sensível | `fs.unlinkSync` em arquivo com nome contendo CPF |
| `RNF-12-C` | Soft Delete Inseguro | Esquema de desativação sem campo de controle de retenção (`dataExclusao`) |
---
## 🏗️ Estrutura do Projeto
```
📦 devsecops-lsp-test
┣ 📂 .github/
┃ ┗ 📂 workflows/
┃ ┗ 📜 compliance-check.yml # CI/CD para checagem de conformidade
┣ 📂 src/
┃ ┣ 📂 config/
┃ ┃ ┣ 📜 database.js # Configuração do banco de dados (SQLite + Sequelize)
┃ ┃ ┣ 📜 multerConfig.js # Configuração de upload de arquivos
┃ ┃ ┗ 📜 swaggerConfig.js # Documentação da API (Swagger/OpenAPI)
┃ ┣ 📂 controllers/
┃ ┃ ┗ 📜 pacienteController.js # Controller principal com as violações intencionais
┃ ┣ 📂 models/
┃ ┃ ┣ 📜 index.js
┃ ┃ ┣ 📜 Paciente.js # Modelo de dados do paciente
┃ ┃ ┗ 📜 ProntuarioMedico.js # Modelo de prontuário médico
┃ ┣ 📂 routes/
┃ ┃ ┣ 📜 index.js
┃ ┃ ┗ 📜 pacienteRoutes.js # Definição das rotas da API
┃ ┗ 📜 server.js # Entry point da aplicação
┣ 📂 uploads/ # Diretório de arquivos enviados
┣ 📜 .gitignore
┣ 📜 database.sqlite # Banco de dados local
┣ 📜 package.json
┗ 📜 package-lock.json
```
---
## 🚀 Como Executar
### Pré-requisitos
- Node.js `>= 18.x`
- npm `>= 9.x`
### Instalação
```bash
# Clone o repositório
git clone https://github.com//devsecops-lsp-test.git
cd devsecops-lsp-test
# Instale as dependências
npm install
# Inicie o servidor
npm start
```
O servidor estará disponível em `http://localhost:3000`.
A documentação interativa (Swagger) pode ser acessada em `http://localhost:3000/api-docs`.
---
## 🔌 Endpoints Disponíveis
| Método | Rota | Descrição | Violação |
|--------|------|-----------|----------|
| `POST` | `/pacientes` | Cria paciente com prontuário | `RNF-07-A` |
| `GET` | `/pacientes/:id/prontuario` | Busca prontuário do paciente | `RNF-07-A`, `RNF-07-B` |
| `GET` | `/pacientes/:id/convenio` | Verifica crédito do convênio | `RNF-08` |
| `POST` | `/pacientes/:id/compartilhar` | Compartilha prontuário com parceiro | `RNF-07-C` |
| `POST` | `/pacientes/:id/upload` | Upload de documento | `RNF-07-D` |
| `POST` | `/pacientes/:id/email-boas-vindas` | Envia e-mail de boas-vindas | `RNF-07-E` |
| `GET` | `/pacientes/:id/relatorio` | Gera relatório em arquivo `.txt` | `RNF-07-F` |
| `GET` | `/pacientes/:id/auditoria` | Registra log de auditoria JSON | `RNF-07-G` |
| `DELETE` | `/pacientes/cpf/:cpf` | Exclui paciente permanentemente | `RNF-12-A` |
| `DELETE` | `/pacientes/arquivar/:cpf` | Remove arquivo de backup | `RNF-12-B` |
| `PATCH` | `/pacientes/desativar/:cpf` | Desativa paciente (soft delete) | `RNF-12-C` |
---
## ⚠️ Aviso Importante
> As violações neste código são **100% intencionais** e existem exclusivamente para fins de testes do servidor LSP. **Não utilize este projeto como base para sistemas em produção.**
As violações estão marcadas no código com o comentário:
```js
// ❌ VIOLAÇÃO [CÓDIGO-RNF]: Descrição ❌
```
Para suprimir uma detecção pontual do LSP durante os testes, utilize a diretiva:
```js
// lgpd-lsp-ignore-next-line RNF-XX
```
---
## 🧪 Pipeline de CI
O workflow `.github/workflows/compliance-check.yml` executa automaticamente a checagem de conformidade a cada push, simulando a integração do LSP em um pipeline de DevSecOps.
---
## 🔖 Tags
- `inpi-v1.0` — Versão registrada para fins de comprovação de autoria.
---
## 📄 Licença
Este projeto está licenciado sob a **Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0)**.
[](https://creativecommons.org/licenses/by-nc-nd/4.0/)
Você é livre para:
- **Compartilhar** — copiar e redistribuir o material em qualquer meio ou formato.
Sob as seguintes condições:
- **Atribuição** — Você deve dar o crédito apropriado ao autor original.
- **Não Comercial** — Você não pode usar o material para fins comerciais.
- **Sem Derivações** — Se você remixar, transformar ou criar a partir do material, não poderá distribuir o material modificado.
> Consulte os [termos completos da licença](https://creativecommons.org/licenses/by-nc-nd/4.0/) para mais detalhes.