AULA 43 MÓDULO 5 segurança ⏱ 50 min

HTTPS e TLS

TLS: confidencialidade, integridade, autenticidade. Let's Encrypt. helmet.js, rate limiting, bcrypt, SQL injection.

HTTPSTLScertificadoLet's Encrypthelmetbcryptrate limitingSQL injection

HTTPS e TLS

HTTPS = HTTP + TLS. Garante: confidencialidade (dados cifrados), integridade (dados não adulterados), autenticidade (servidor é quem diz ser).

TLS HANDSHAKE
1
Browser envia ClientHello com versões TLS suportadas
2
Servidor responde com certificado (chave pública)
3
Browser verifica se certificado é válido e confiável
4
Negociam chave de sessão simétrica
5
Dados cifrados com a chave de sessão

Certificados e Let's Encrypt

Todo servidor HTTPS precisa de um certificado SSL/TLS emitido por uma CA confiável. Let's Encrypt emite certificados gratuitos automaticamente.

🔒
HSTS
HTTP Strict Transport Security instrui browsers a sempre usar HTTPS. Evita ataques de downgrade. Adicione o header Strict-Transport-Security no servidor.

Boas práticas de segurança

Segurança em profundidade: HTTPS é só uma camada. Outras práticas essenciais:

helmet.js — Headers de segurança: CSP, X-Frame-Options, HSTS
rate limiting — express-rate-limit: bloquear brute force e DDoS
bcrypt — Nunca armazenar senha em texto plano — sempre hash
SQL injection — Use parameterized queries — nunca concatenar SQL
OWASP Top 10 — Leia e implemente proteções contra as 10 vulnerabilidades mais comuns
javascript
// helmet.js + rate limiting + bcrypt
const helmet    = require('helmet')
const rateLimit = require('express-rate-limit')
const bcrypt    = require('bcryptjs')

app.use(helmet())  // CSP, HSTS, X-Frame-Options, etc

app.use('/api/', rateLimit({
  windowMs: 15 * 60 * 1000,
  max: 100,
  message: { error: 'Muitas requisições — tente em 15 minutos' }
}))

// Hash de senha
const hashPassword   = async (pwd) => bcrypt.hash(pwd, 12)
const verifyPassword = async (pwd, hash) => bcrypt.compare(pwd, hash)

// SQL injection — NUNCA concatenar
// ✗ db.query(`SELECT * FROM users WHERE email = '${email}'`)
// ✓ db.query('SELECT * FROM users WHERE email = $1', [email])
quiz · aula 43
Teste seus conhecimentos
0/3 respondidas
QUESTÃO 01
O que TLS garante?
QUESTÃO 02
Para que serve o bcrypt?
QUESTÃO 03
Por que nunca concatenar variáveis em queries SQL?
0/3