Segurança não é um recurso, é uma base
É comum ver segurança sendo tratada como algo a "adicionar depois". O problema é que boa parte das falhas mais comuns em sistemas web não são vulnerabilidades sofisticadas — são práticas básicas que deveriam ter sido aplicadas desde a primeira linha de código.
Checklist de fundamentos
- Prepared statements: toda consulta SQL com dado vindo do usuário deve usar parâmetros preparados (PDO/prepared statements), nunca concatenação de string — é a defesa mais eficaz contra SQL injection.
- Hash de senha: senhas nunca devem ser armazenadas em texto puro nem com hash reversível. Use funções como
password_hash()com bcrypt/argon2. - Validação e sanitização de entrada: todo dado que vem de fora (formulário, query string, upload, API de terceiros) deve ser validado antes de ser usado — inclusive tipo, tamanho e formato.
- Escape de saída: ao exibir dado de usuário em HTML, sempre escapar (
htmlspecialcharsou equivalente) para evitar XSS. - HTTPS obrigatório: especialmente em qualquer tela de login, checkout ou área logada.
- Controle de acesso: cada rota e cada ação precisa checar se o usuário autenticado realmente tem permissão para aquele recurso — não basta estar logado.
O que costuma ser esquecido
Além do básico, alguns pontos que aparecem menos em tutoriais mas fazem diferença real:
- Logs de auditoria para ações sensíveis (quem aprovou um pedido, quem alterou uma permissão, quem excluiu um registro)
- Expiração e invalidação de sessão em trocas de senha ou de e-mail
- Rate limiting em endpoints de login e recuperação de senha, para dificultar força bruta
- Atualização regular de dependências (Composer, bibliotecas JS) — muitas vulnerabilidades exploradas em produção já tinham correção disponível havia meses
Segurança não é um item que se marca como "concluído" — é um processo contínuo de revisão. Mas a boa notícia é que a maior parte do risco cai drasticamente só com esses fundamentos bem aplicados desde o início do projeto.