Validação no lado servidor ou no lado cliente?

Dias atrás assisti a uma discussão na DevMedia sobre validação de formulários na web. E a pergunta, ou o objetivo daquele bate-papo era tentar chegar a uma conclusão sobre o que é melhor como validação de formulários em uma aplicação web. Então, você prefere ou acha mais seguro realizar validação no lado cliente (front-end) ou no lado servidor (back-end) de suas aplicações? Ou quem sabe, prefere validar das duas formas?

A minha opinião é, valide tanto no front-end quanto no back-end, esta é a forma mais segura e apropriada de validação. Vou tentar agora expor detalhadamente porque tenho esse pensamento.

1.Validação Front-End

A validação no lado cliente pode ser atualmente realizada de três formas até onde me lembro. A primeira e mais trabalhosa é você mesmo desenvolver todo o processo de validação via JavaScript. Manipulando o DOM para acessar cada campo do seu formulário e criar suas próprias regras de validação.

A segunda, é usar uma biblioteca ou framework JavaScript como o jQuery Validator. Este recurso é bem interessante e torna mais simples o processo de validação porque já tem muita coisa pronta.

Por fim, a terceira opção, e talvez atualmente a mais interessante, seria usar o próprio validador do HTML5.

2.Validação Back-End

No lado servidor cada linguagem de programação vai ter seu próprio sistema ou biblioteca para fornecer o recurso de validação. Eu vou citar alguns que conheço em Java, que é  linguagem que tenho maior domínio.

Então, temos a especificação JSR 303: Bean Validation. Um padrão de validação que usa anotações nas classes de domínio, onde cada anotação tem um tipo especifico de validador. Assim, é possível validar se um campo no formulário está nulo, se ele tem um número X de caracteres ou não, entre outras.

Além disso, é possível usar a validação do Hibernate Validator, que tem um sistema similar ao Bean Validation, porém com anotações próprias e em maior número que o da especificação. A grande vantagem é que se pode usar os recursos do Hibernate Validator e da JSR 303 simultaneamente.

Uso bastante o Spring MVC e ele tem um processo de validação próprio chamado Spring Validator. Este recurso permite que você crie todas as regras lógicas de validação e possui também, alguns métodos de validação já prontos. Mas é possível também, integrar a JSR 303 e o Hibernate Validator ao Spring MVC sem problema algum. Fica a critério do desenvolvedor qual processo prefere utilizar.

3.Vantagens e Desvantagens de validação Front ou Back End

Agora que já apresentei algumas formas de validação tanto back-end como front-end, vou descrever a minha opinião sobre elas e porque prefiro usar os dois sistemas ao invés de apenas um deles.

As vantagens que vejo em validar no lado servidor é que você tem a validação mais segura possível. Desde que, você não esqueça ou não erre nenhuma regra ou lógica de validação, será impossível burlar este sistema. Por isso, acho que ele é indispensável como validação para um sistema web.

Mas tem uma desvantagem também. Atualmente existem muitos sistemas hospedados em nuvens e estas nuvens têm diferentes tipos de cobrança. Um bem comum é pelo uso dos recursos. Ou seja, quanto mais recursos sua aplicação usa, mais você paga. Até ai tudo bem, tudo normal. Mas em alguns casos, existe uma regra que determina uma quantidade x de requisições GET ou PUT ou POST. Ou seja, você fecha um plano que te dá direito a 2.000 requisições GET e 500 requisições PUT ao mês. Se ultrapassar esse número, terá um custo adicional.

As requisições GET são as mais comuns possíveis. Qualquer consulta, como simplesmente abrir uma página, depende de uma requisição GET. Então, o ponto negativo em usar uma validação back-end é que você vai gastar pelo menos uma requisição GET ou PUT para validar seu formulário e ter como resposta, em caso de erro, que tal campo é invalido ou precisa ser preenchido. Então, dependendo do tipo de site ou aplicação web que você desenvolveu, pode gerar um custo alto para seu bolso.

E como podemos contornar essa desvantagem da validação no lado servidor? Simples, criando um validador no lado cliente. Assim, você vai garantir que os campos do formulário já estejam preenchidos corretamente ao enviar a requisição e no lado servidor, terá uma garantia extra dessa validação.

Mas porque então não validar apenas no lado cliente? Porque o front-end fica acessível no navegador. E todo o código que lá está, pode acabar sendo alterado por alguém que tenha um conhecimento avançado e más intenções. O código JavaScript pode perfeitamente ser alterado e assim a validação pode ser burlada.

Então…, podemos usar o validador do HTML5. Sim, podemos, mas existem, por exemplo, navegadores ou versões antigas de navegadores que não suportam o HTML5 e assim, não vão suportar o sistema de validação dele. Quando você abre uma página no navegador que não suporta HTML5 as propriedades desta versão são desabilitadas, mas o restante do código não. Deste modo, você teria um formulário, com todos os campos disponíveis para o usuário preencher, mas com a validação desativada. Neste caso, a sua segurança seria a validação no lado servidor.

Ainda sobre o lado cliente, existe a possibilidade de que bots, softwares que simulam as ações humanas,  possam acessar seu site por fora do navegador. Assim, a validação front-end seria burlada.

Veja como um tipo de validação acaba sempre complementando o outro. Por isso, acho mais seguro sempre utilizar a validação no lado servidor e também no lado cliente.

Gostaria de compartilhar sua opinião sobre este assunto ou expor mais algumas vantagens e desvantagens? Deixe-as no sistema de comentários e até a próxima.

Ballem

Marcio Ballem é bacharel em Sistemas de Informação pelo Centro Universitário Franciscano em Santa Maria/RS. Tem experiência com desenvolvimento Delphi e Java em projetos para gestão pública e acadêmica. Possui certificação em Java, OCJP 6.

Você pode gostar...