quinta-feira, 26 de fevereiro de 2009

1. Validação de Entrada de dados

Um dos princípios que devem ser sempre observados em sistemas web, é o de que as entradas de dados são essencialmente inseguras - isso quer dizer que os dados são geralmente não confiáveis.

Até o momento em que os dados chegam ao script PHP, estes saíram do browser do cliente, passaram por um conjunto de nós de rede que incluem proxys, firewals, ferramentas de filtragem, etc. Qualquer um destes passos possui atrelada uma oportunidade - seja intencional ou acidental, de corromper ou alterar os dados de modo inesperado.

Considerando ainda que os dados podem ser adulterados neste longo caminho, ou mesmo forjados por atacantes que obtiveram informações privilegiadas a partir deste ou de outros sistemas, é absolutamente imperativo que todos os dados de entrada no sistema sejam validados para garantir que eles batam com os formatos e conteúdos esperados.

Embora a validação dos dados não seja a solução universal para todos os problemas de segurança que possam haver em um sistema, boa parte das falhas podem ser corrigidas assumindo a postura de validação total.

Isso inclui:
  • a verificação dos tipos de dados - como datas, numéricos, alfanuméricos, etc.
  • a checagem do tamanho máximo permitido - um campo deve ter especificado o número mínimo e máximo de caracteres que deve ser informado; evidentemente que campos não obrigatórios possuem o tamanho mínimo igual a zero.
  • a verificação da consistência do conteúdo tem como objetivo analisar se o padrão do conteúdo está dentro do esperado - campos com máscara ou formato tais como CEP, CPF, CNPJ, são bons exemplos disso.
  • o teste de consistência lógica - códigos informados podem ser verificados antes de proceder com as demais atividades; isso quer dizer, que em alguns casos, podemos verificar se determinado registro existe na base de dados.
  • o teste de código injetado - verificar se o campo possui código suspeito, como instruções SQL, HTML ou javascript.


Nenhum comentário: