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