Validação de Input e Codificação de Output
Valide todos os inputs no lado do servidor, codifique os outputs no contexto correto e evite injeções.
Validação de Input e Codificação de Output é uma aula grátis de Cyber Security Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Cyber Security Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Cyber Security Academy inclui 4 aulas no total.
Por que a validação de entradas é importante
Vulnerabilidades de injeção — SQL, comandos, LDAP, XPath e outras — surgem quando entradas não confiáveis são interpretadas como código. A validação de entradas garante que os dados estejam em conformidade com os tipos, comprimentos e formatos esperados antes de serem processados, armazenados ou retornados.
Validação por lista de permissões versus lista de bloqueio
A validação por lista de permissões (lista branca) define o que é aceitável: apenas caracteres alfanuméricos, apenas números inteiros no intervalo de 1 a 100, apenas formatos de e-mail válidos. A lista de bloqueio (lista negra) tenta bloquear entradas maliciosas conhecidas e está sempre incompleta. Prefira listas de permissões.
Validação no lado do servidor
A validação no lado do cliente melhora a experiência do usuário, mas não oferece nenhuma segurança — invasores a contornam facilmente usando as ferramentas de desenvolvedor do navegador ou curl. Sempre valide no lado do servidor. O lado do cliente é uma conveniência; o lado do servidor é o controle de segurança.
Validação de entradas para diferentes tipos de dados
Números: verifique o tipo e o intervalo. Cadeias de caracteres: verifique o comprimento e o conjunto de caracteres. Datas: faça o processamento estrito e verifique o intervalo. Arquivos: verifique a extensão AND os bytes mágicos/o tipo MIME — nunca confie apenas na extensão. URLs: analise e valide o esquema, o host e os componentes do caminho.
Consultas parametrizadas evitam injeção de SQL
O resultado mais importante da validação de entradas para bancos de dados é nunca concatenar entradas do usuário em SQL. Use consultas parametrizadas (instruções preparadas), nas quais a entrada do usuário é passada como um parâmetro, e não interpolada na cadeia de caracteres de query.
// WRONG:
const q = "SELECT * FROM users WHERE name = '" + name + "'";
// RIGHT:
const q = "SELECT * FROM users WHERE name = $1";
await client.query(q, [name]);Contextos de codificação de saída
A mesma cadeia de caracteres exige uma codificação diferente dependendo do contexto. Corpo HTML: faça a codificação HTML (< > &). Atributo HTML: codificação de atributos HTML. JavaScript: faça o escape em JS. Parâmetro de URL: codificação de URL (codificação percentual). Usar a codificação errada deixa brechas que os invasores exploram.
Codificação HTML contra XSS
Nunca insira dados do usuário diretamente no HTML. Use um mecanismo ou uma biblioteca de modelos que faça o escape automático de HTML. No React, {value} é seguro; dangerouslySetInnerHTML ignora o escape. No Django, os modelos fazem o escape automático, a menos que você use explicitamente o filtro safe.
Codificação no contexto do JavaScript
Quando inserir dados em JavaScript (por exemplo, uma variável inicializada com dados do usuário), a codificação HTML é insuficiente. Use codificação JSON: JSON.stringify(value). Isso impede que os dados saiam do contexto literal de uma cadeia de caracteres JS.
Codificação de URL
Dados fornecidos pelo usuário inseridos em URLs devem ser codificados em percentual usando encodeURIComponent() (JS) ou urllib.parse.quote() (Python). Dados não codificados podem manipular a estrutura da URL, levando a redirecionamentos abertos ou travessia de caminho.
Política de segurança de conteúdo como defesa em profundidade
CSP adiciona uma segunda linha de defesa contra XSS. Uma CSP rigorosa que usa nonces impede a execução de scripts embutidos mesmo se uma carga útil de XSS for injetada, porque o navegador se recusa a executar scripts sem o atributo nonce correto.
Prevenção de XSS baseado em DOM
XSS baseado em DOM ocorre quando JavaScript lê de fontes controladas pelo invasor (location.hash, document.URL, cookie) e grava em destinos perigosos (innerHTML, document.write, eval). Audite todos os fluxos de dados das APIs do navegador para os destinos do DOM usando ferramentas de análise estática.
Verificação de conhecimento
Por que a validação de entradas no lado do servidor é essencial mesmo quando a validação no lado do cliente está implementada?
Resumo
A validação de entradas (listas de permissões, verificação de tipos, limites de comprimento), combinada com a codificação de saída sensível ao contexto (HTML, JS, URL, parametrização de SQL), é a principal defesa contra ataques de injeção e XSS. Ambas devem ser aplicadas no lado do servidor, sem exceção.
Perguntas Frequentes
A aula “Validação de Input e Codificação de Output” é grátis?
Sim — o texto completo de “Validação de Input e Codificação de Output” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Cyber Security Academy, atualize para CoddyKit PRO. O curso de Cyber Security Academy inclui 4 aulas no total.
O que vou aprender em “Validação de Input e Codificação de Output”?
Valide todos os inputs no lado do servidor, codifique os outputs no contexto correto e evite injeções. Você pratica Cyber Security Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Cyber Security Academy?
Nenhuma experiência prévia é necessária. Cyber Security Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Validação de Input e Codificação de Output”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Cyber Security Academy?
Sim. Cada aula de Cyber Security Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Validação de Input e Codificação de Output
- Gerenciamento Seguro de Dependências
- OWASP ASVS: Padrão de Verificação de Segurança de Aplicações
- Técnicas de Revisão Segura de Código