diff --git a/backend/server.js b/backend/server.js index 51387fd..7d19dbd 100644 --- a/backend/server.js +++ b/backend/server.js @@ -13,31 +13,23 @@ app.use(cors()); app.use(express.json()); app.use(express.urlencoded({ extended: true })); + +app.get('/api/search', (req, res) => { + const termo = req.query.q || ''; + // Vulnerabilidade Crítica: XSS Refletido + res.send(`

Resultados para: ${termo}

`); +}); + // Serve a pasta frontend app.use(express.static(path.join(__dirname, '../frontend'), { extensions: ['html'] })); -// Rotas das 4 páginas estáticas -app.get('/', (req, res) => res.sendFile(path.join(__dirname, '../frontend/index.html'))); +// Rotas das páginas estáticas (A rota '/' original foi comentada para não dar conflito com a do ZAP) +// app.get('/', (req, res) => res.sendFile(path.join(__dirname, '../frontend/index.html'))); app.get('/about', (req, res) => res.sendFile(path.join(__dirname, '../frontend/about.html'))); app.get('/careers', (req, res) => res.sendFile(path.join(__dirname, '../frontend/careers.html'))); app.get('/contact', (req, res) => res.sendFile(path.join(__dirname, '../frontend/contact.html'))); -// ========================================== -// VULNERÁVEL (OWASP ZAP) -// ========================================== -/*app.get('/api/search', (req, res) => { - const termo = req.query.q || ''; - // A vulnerabilidade crítica: devolver o input diretamente no HTML - res.send(` - - Resultados - -

Resultados para: ${termo}

- Voltar - - - `); -});*/ +// O eval() FOI REMOVIDO DAQUI PARA O SONARQUBE NÃO BLOQUEAR! // Configuração do transporte de E-mail (Mocks de teste vs Produção) let transporter; diff --git a/package-lock.json b/package-lock.json index 0c659ad..c8bf9fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,6 @@ "dependencies": { "cors": "^2.8.5", "express": "^4.18.2", - "lodash": "4.17.15", "nodemailer": "^8.0.11" }, "devDependencies": { @@ -3900,12 +3899,6 @@ "node": ">=8" } }, - "node_modules/lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "license": "MIT" - }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", diff --git a/tests/core.test.js b/tests/core.test.js index 31446fb..359428e 100644 --- a/tests/core.test.js +++ b/tests/core.test.js @@ -36,15 +36,6 @@ describe('Enterprise Application Flow & API Validation', () => { expect(response.status).toBe(404); }); - /*// OWASP ZAP (/api/search) - it('Should reflect the search query in the HTML response (/api/search) - Vulnerable to XSS', async () => { - const maliciousPayload = ''; - const response = await request(app).get(`/api/search?q=${maliciousPayload}`); - - expect(response.status).toBe(200); - // Verifica se o payload é refletido exatamente como entrou (confirmando a vulnerabilidade) - expect(response.text).toContain(`Resultados para: ${maliciousPayload}`); - });*/ }); // ==========================================