Wednesday, April 8, 2015

Validação de informação Cliente / Servidor

Nunca valide apenas no lado do cliente.

Com a "moda" de serviço na nuvem (nada mais do que deixar web-service disponível) muitos acham que é apenas codificar um software para servidor, outro para o cliente e pronto. Muitos esquecem de fazer a validação da informação, causando inconsistência nos dados em relação a lógica de negócios ou cenários de uso.


O que é validação de informação? Nada mais do que uma avaliação das informações com sua lógica de negócios. Existem três formas aplicadas no mercado de software:

A primeira é fazer a validação APENAS no lado do servidor*.
A segunda é fazer a validação APENAS no lado do cliente*.
E por fim fazer a validação no lado do cliente e no servidor.

O que é melhor? Qual tipo devo utilizar?
Vamos exemplificar.

Digamos que foi definido no sistema que o CPF do usuário é obrigatório.

Vamos supor o primeiro caso, que é validar a informação apenas no servidor. Toda vez que algúem tentar se cadastrar, você deverá acionar o servidor, que fará o cálculo do CPF e verificará se ele é válido. Ok, o sistema estará garantindo que as informações são válidas.

Agora vamos supor o segundo caso, que é validar a informação apenas no cliente. Antes de enviar uma requisição para o web-service, o software fará o cálculo para ver se o número é válido (antes de acionar o servidor).
Ok, aqui você garantiu que o seu sistema sempre irá enviar um número válido e além disso consegue economizar o trafego de dados na rede, já que não precisa que o servidor diga que o CPF está errado, o próprio software que fica no cliente já vai identificar o problema sem a necessidade de se conectar ao servidor. Porém, sem a validação no servidor, o web-service estará vulnerável, porque o servidor não vai conseguir garantir que aquilo que está recebendo seja de fato um CPF, muito menos número válido, ou seja, nos casos onde seu software contará com um número válido de CPF, ele poderá causar uma inconsistência no seu software e provavelmente vai ter que aplicar uma correção em cima da informação incorreta. Isto pode acontecer caso a URL do web-service fique exposta ou se alguém tentar hackear o seu sistema,
Este problema pode afetar todos os usuários, do sistema, mesmo os que tenham inserido CPFs válidos (pois todo o sistema poderá ficar inoperante).

O terceiro caso é a junção dos dois cenários anteriores, realizando a validação no lado do cliente e no lado do servidor. Neste caso, você poderá realizar a validação dos dados sem a necessidade de se conectar ao servidor e ainda poderá permitir que demais pessoas utilizem estes web-services, como uma equipe terceirizada e parceiros.

Sendo desenvolvedor, você NUNCA deverá implementar o segundo caso, isso acarretará em problemas imensos, podendo acabar com seu sistema. Para quem implementa apenas o primeiro caso, ok, porém seria melhor validar também no cliente, economizando rede e recursos computacionais. Se não o faz, o aconselho a realizar o uso da validação tanto no servidor quanto no cliente.

Agora, se você é o cliente final, garanta com sua equipe que existe validação AO MENOS no lado do servidor. Pode parecer brincadeira, mas é muito comum as pessoas validarem as informações apenas no lado do cliente. Imagine o que aconteceria se sua instituição bancária só validasse seu saldo no seu navegador? O que aconteceria se você pudesse(você pode**) manipular as informações enviadas pelo browser?

*Servidor: A máquina principal do sistema, onde as informações de todos os usuários vivem em conjunto. Acesso restrito.
*Cliente: O que o usuário final acessa / baixa para o computador. Pode ser uma página de internet ou um aplicativo.

**Com as opções de desenvolvedor habilitadas (nas preferências do seu navegador), clique com o botão direito em qualquer lugar da página e vá em "inspecionar elemento". Qualquer valor alterado na página terá efeito imediato.