AULA 42
MÓDULO 5
segurança
⏱ 45 min
CORS
CORS: por que existe, como funciona o preflight, como configurar no Express com lista branca. Nunca wildcard com credenciais.
CORSsame-originpreflightOPTIONSAccess-Control-Allow-Origincors npm
O que é CORS
CORS (Cross-Origin Resource Sharing) é um mecanismo de segurança do browser que bloqueia requisições de origens diferentes por padrão. Seu backend precisa autorizar explicitamente quais origens podem acessá-lo.
same-origin policy
Por padrão, um script em https://app.com não pode fazer fetch para https://api.outro.com. O browser bloqueia. CORS é o mecanismo que o servidor usa para dizer: esta origem pode me acessar.PREFLIGHT REQUEST — OPTIONS
1
Browser envia OPTIONS perguntando: posso fazer POST aqui?
2
Servidor responde com Access-Control-Allow-Origin e Allow-Methods
3
Browser verifica os headers e, se permitido, envia a requisição real
Configurando CORS no Express
Use o pacote cors para configurar CORS de forma declarativa. Configure sempre com lista branca explícita — nunca use * em produção com credenciais.
CORS não é segurança total
CORS protege browsers. Não protege de requisições server-to-server (curl, Postman). Para APIs que exigem autenticação, use sempre JWT/Bearer além de CORS.
javascript
// CORS no Express — configuração correta const cors = require('cors') const express = require('express') const app = express() const allowedOrigins = [ 'https://app.example.com', 'https://admin.example.com', process.env.NODE_ENV === 'development' && 'http://localhost:3001' ].filter(Boolean) app.use(cors({ origin: (origin, callback) => { if (!origin || allowedOrigins.includes(origin)) { callback(null, true) } else { callback(new Error('CORS: origin não permitida')) } }, methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'], allowedHeaders: ['Content-Type', 'Authorization'], credentials: true }))
quiz · aula 42
Teste seus conhecimentos
0/3 respondidas
QUESTÃO 01
CORS é verificado por...
QUESTÃO 02
Por que não usar Access-Control-Allow-Origin: * com autenticação?
QUESTÃO 03
O que é o Preflight Request?
0/3