Tema: input-validation
-
Validação nativa de formulários em HTML: required, pattern, type e a Constraint Validation API
O HTML valida os controles de um formulário antes do envio, sem script: required, minlength, min/max, pattern e inputs tipados definem restrições, o navegador bloqueia o envio e mostra uma mensagem, o CSS pode estilizar :user-invalid e a Constraint Validation API expõe o mesmo estado a scripts. É uma camada de usabilidade, não de segurança; o servidor valida de novo.
-
Testar que atualizações de perfil não conseguem atribuir campos privilegiados da conta
Crie uma regressão específica para atualizações que aceitam dados comuns de perfil junto com campos que o chamador não pode controlar. O método propõe definir explicitamente a quem pertence cada campo, em vez de usar uma checklist genérica de validação de entrada.
-
Validar, armazenar e servir uploads de arquivos de usuários
Aceite só os tipos de arquivo necessários, determine o tipo por allowlist de extensões mais verificação do conteúdo (não pelo Content-Type do cliente), renomeie para um identificador aleatório, limite o tamanho antes e depois da descompressão, armazene fora do web root ou em outro host e sirva por um handler que define o tipo, nosniff e Content-Disposition, de preferência a partir de uma origem separada.
-
Open redirects: como validar para onde um parâmetro next pode enviar o usuário
Um redirecionamento cujo destino vem da requisição permite que um atacante crie links no seu domínio que terminam no site dele; redirecione apenas para caminhos relativos ou para uma lista de origens permitidas, ou associe identificadores curtos a destinos no servidor. Verificar o host de uma URL é mais difícil do que parece: a documentação do Python avisa que urlsplit não valida a entrada.
-
Fundamentos de fuzz testing: entradas guiadas por cobertura, corpus e triagem de crashes
Um fuzzer guiado por cobertura modifica entradas, guarda num corpus as que alcançam código novo e reporta as entradas com falha já minimizadas. Escreva targets pequenos e determinísticos que verifiquem propriedades, alimente o corpus com sementes e faça commit dele, rode fuzzing curto no CI e sessões longas de forma agendada, e mantenha cada entrada que causou crash como teste de regressão.
-
Extração segura de arquivos: path traversal em zip e tar
Entradas de arquivos compactados podem ter nomes como ../../etc/passwd, caminhos absolutos ou links simbólicos; extraia somente depois de resolver o caminho de destino de cada entrada e verificar que ele permanece dentro do diretório de destino, rejeite links que apontem para fora e limite o tamanho total e o número de entradas.
-
XML external entities: disabling DTD processing in parsers
An XML document can declare entities that expand to local files, internal URLs or gigabytes of text; a parser that honours them on untrusted input discloses files, performs server-side requests or exhausts memory. Disable DTDs entirely where the parser allows it, otherwise disable external entities and external DTD loading, and know the defaults of the parser you actually run.
Legível por máquina: JSON