Tratamento de dados formulários PHP

O tratamento de dados em formulários, apesar de ser extremamente necessário para o melhor funcionamento e claro, para a maior segurança dos dados em sistema web, isso é muitas vezes desprezados pelos desenvolvedores iniciantes.

Essa é uma das dúvidas mais frequentes entre os desenvolvedores iniciantes. E não se restringe apenas, a desenvolvedores PHP, mas é algo que se abrange a outras linguagens que realizam o envio em recebimento de dados por métodos, tais como POST e GET.

O desenvolvedor, precisa ter em mente que um formulário, neste caso que estou considerando, um formulário HTML, é um mundo de possibilidades dada aos usuários de seus sistemas.

Sim. Campos de dados disponíveis para o usuário, QUANDO NÃO TRATADOS corretamente, se torna um poder superior dado aos seus usuários.

Através de tais campos, disponibilizados em formulários aos usuários, scripts comandos maliciosos, tais como comandos ao bancos de dados, podem ser facilmente enviados ao servidor, o que trará uma boa dor de cabeça.

Neste tutorial, tentarei elencar alguns pontos que considero importantes para o tratamento de dados.

Validação de dados

Um dos primeiros itens a serem considerados neste tema, é a validação do tipo de dados esperado. O tipo de dados esperado, pode reduzir em muitos porcentos as possibilidades de scripts enviados pelos usuários maliciosos.

Por exemplo. Seu formulário em tem um campo do tipo idade. Por conhecimento geral, sabe-se que a idade é medida em números inteiros, não negativos, iniciados em zero, e infinitamente (caso o cidadão sobreviva) a um número superior, assim, considerando que o mesmo seja enviado via POST, um tratamento que geralmente utilizo, é a conversão explícita da variável recebida para um inteiro, utilizando a palavra reservada int antes da atribuição do valor, porém, para um melhor desenvolvimento do código, e consistência dos dados, a validação do tipo numérico e valor maior que zero, também pode (e deve) ser utilizados.

Veja o exemplo, utilizando a conversão do valor recebido:

No exemplo dois, utilizando a validação dos dados em conjunto:

Além da validação de tipo de dados, é importante que seja feita a validação de existência dos dados esperados. Considero alterar a validação proposta anteriormente, para a seguinte:

Assim, garantimos que, além de existir o envio dos dados que esperamos, garantimos que o mesmo seja do tipo e, possivelmente do valor aguardado, neste caso, acima de zero.

Funções de tradução para realidade HTML

Quando dados do tipo inteiros são enviados, podemos facilmente fazer essa validação, porém, quando o tipo de dados é um string, ou seja, um campo aberto, onde não sabemos ao certo que tipo de dados serão enviados, a validação pelo tipo, não fará muita diferença neste caso.

Um campo do tipo nome, por exemplo, ficaria praticamente impossível fazer essa validação por tipo, já que no mesmo, o usuário pode digitar dados variáveis, letras, números, traços, e etc.

Função htmlspecialchars

Para este tipo de dados, a melhor alternativa, será o uso de funções para conversão de caracteres especiais, tais como a função htmlspecialchars, que converte caracteres especiais para a realidade HTML.

Essa função, executa a tradução dos seguintes caracteres especiais

  • ‘&’ (ampersand) torna-se ‘&’
  • ‘”‘ (aspas dupla) torna-se ‘"’ quando ENT_NOQUOTES não está definida.
  • ”’ (aspas simples) torna-se ‘'’ apenas quando ENT_QUOTES está definida.
  • ‘<‘ (menor que) torna-se ‘&lt;’
  • ‘>’ (maior que) torna-se ‘&gt;’

Essa função, realiza a tradução destes principais caracteres mais úteis na programação Web.

Função htmlentities

Diferentemente da função htmlspecialchars, a função htmlentities, converte não somente todos os caracteres aplicáveis em entidades html.

Script injections

As funções apresentadas anteriormente, podem prevenir que usuários mal intencionados, façam a inserção em nosso sistema, dos chamados script injections, que são scritps do tipo JavaScript, como por exemplo um alert, que seria o mais leve e inofensível das inserções de scripts.

Caso não sejam tratados, tais scripts podem ser utilizados para se descobrir senhas, acessos, cookies e mesmo, sessions no servidor, basta ter a oportunidade certa.

Concluíndo

Posso estender esta discussão por muito mais validações quanto necessárias, porém, a ideia central e alerta da importância de se realizar a validação dos dados, tanto da sua existência, para que não seja emitido um erro ao usuário, por não tratamento de um recebimento de dados, como o tipo de dados esperado ou mesmo, caracteres não esperados que pode comprometer nosso sistema.

Em novas postagens, vamos falar de outros tipos de validações que podem ser importantes para uma perfeita consistência dos dados enviados e recebidos em nossos sistemas.

Se gostou da discussão, deixe abaixo seu comentário e vamos falar um pouco mais sobre a segurança dos dados em formulários web.

Grande abraço. Até o próximo post.

Autor(a):
Claudeci Goularte
Formado em Análise e Desenvolvimento de Sistemas pela Faculdade de Filosofia, Ciências e Letras Santa Marcelina, e pós-graduado em Arquitetura de Software, pelo Instituto de Gestão em Tecnologia da Informação, o IGTI. Sou desenvolvedor de sistemas desde 2006, com ampla experiência em PHP, MySQL, C#, SQLServer, CSS, HTML, JavaScrit, JQuery, C#, SqlServer, entre outras. Amante da profissão.

Deixe uma resposta

Seu endereço de e-mail não será publicado. Campos marcados são obrigatórios *