Segurança da aplicação
Toda entrada é uma hipótese até o servidor confirmar o contrário.
Validação no servidor, consultas parametrizadas, codificação por contexto e regras explícitas para manter dados não confiáveis sob controle.
Validação acontece no servidor
Validação no navegador melhora a experiência, mas pode ser alterada ou ignorada. O servidor repete as regras do zero, verificando tipo, formato, tamanho, intervalo e relação com o estado da operação.
Quando existe uma lista finita de valores, uma lista permitida é mais clara que tentar reconhecer tudo que parece perigoso. Texto livre exige tratamento próprio e não deve ser destruído por conter caracteres legítimos.
Dados não devem virar instruções
Consultas parametrizadas mantêm a estrutura da operação separada dos valores recebidos. A mesma ideia vale para comandos, caminhos, cabeçalhos e integrações.
Rotas e arquivos conhecidos podem ser resolvidos por mapas explícitos. Assim, uma entrada externa não decide diretamente o que o sistema executa ou inclui.
Saída e regras dependem do contexto
Um valor seguro como texto HTML pode ser inseguro dentro de JavaScript, CSS, URL ou atributo. A codificação precisa conhecer o interpretador que receberá o dado.
Uma requisição bem formada ainda pode ser indevida. Quem pode executar a ação, em qual ordem e sobre qual registro são regras de autorização e fluxo que também fazem parte da segurança.