Validação de formulários – De quem é a responsabilidade?
Postado por: Pedro Rogério em
De quem é a responsabilidade de validar um formulário? Do desenvolvedor front-end ou do programador? A sim, vocês preferem tirar no cara ou coroa.
A um tempo atrás fui questionado sobre isso e então resolvi fazer um post sobre o assunto para saber a opinião de vocês. Então, imaginem um formulário, simples de cadastro por exemplo, com alguns campos obrigatórios como Nome, Email, CPF, etc. Na sua opinião, quem deve efetuar a validação desses dados é somente o desenvolvedor front-end através de JavaScript, ou ele deve deixar isso de lado e a validação deve ser toda feita do lado servidor?
A minha opinião é a seguinte, a validação deve ser efetuada do lado cliente e do lado servidor, muitos desenvolvedores na maioria das vezes não estão nem aí pra isso e só querem saber da validação do lado cliente.
Sabe por que digo que a validação deve ser feita também do lador servidor, leve em consideração que o JavaScript roda do lado cliente, portanto, pode em algum momento falhar e você terá salvo dados inconsistentes em seu banco de dados. E você, qual sua opinião?















Concordo com você, a validação deve ser feita nos dois lados!
Eu concordo em fazer a validação de ambos os lados por motivo de segurança e esse assunto também já foi motivo de discução aqui na empresa em que trabalho, justamente por já ter ocorrido falha por esse motivo de falha na validação.
É coo dizem por ai, a respeito do backup, quem tem um acaba não tendo nenhum, quem tem dois acaba tendo um.
Então quanto mais confiável sua aplicação for mais fácil fica administrar os dados.
Tb concordo.
Salve,
Concordo com você, tem que ser dois 2 lados.
Valida no front-end, passou, vai passar no back-end. Se não tiver javascript ativo? Passa no front-end, mas vai cair na validação do back-end.
Então eu creio que validando nos dois fica melhor e é o correto. Você tem a validação do back-end como um ‘a mais’ ou uma segurança de que vai ser validado os dados de qualquer maneira.
Além do javascript, podem mudar os valores dos campos em tempo real, e o back-end pode evitar ataques.
Mais segurança é sempre bom.
Valeu!
Concordo plenamente com você Pedro, a validação deve ocorrer de ambos os lados.
Na época que eu programava em ASP 3.0, realizava a validação do lado servidos somente e somente retornando o resultado para o cliente.
Hoje com o ASP.NET a validação é feita de ambos os lados.
Como você mesmo disse, evita falhas e dados inconsistentes.
então não sou programador para entender a fundo o lado do servidor, porém entendo seu ponto. mas ainda assim acredito que não haja necessidade de validação e sim informar ao usuário a digitar corretamente. Validações dão a entender o seguinte na minha opinião
” você é uma anta que não sabe nem digitar, mas não tem problema aqui lhe darei uma ajuda.”
não curto muito validações de campos do tipo que restringem caracteres, prefiro informações de validações que quando informado algo errado surga uma informação de contexto para o sujeito, refazer o campo.
Mas como o cliente sempre enche o saco para fazer temos que se sujeitar algumas vezes, quando nosso argumento não for convincente o suficiente =(
Olá Rodrigo,
Em certos pontos concordo com você, mas acho extremamente necessário a criação de campos de validação no formulário sim.
Não sou da opinião de que a pessoa é uma anta e não sabe digitar, mas muitas das vezes são enviados informações incoerentes, ou até mesmo arquivos infectados pela simples força negativa de algumas pessoas em prejudicar bancos de daddos, sistemas.
Acredito que a validação tenha que ser feita dos dois lados sim, agora dependendo de como foi feita a criação do projeto também, se foi feito apenas por um designer, bom trabalho para o programador.
Faz pouco tempo que comecei a mexer a fundo mesmo com a questão de programação, mas assim que divulguei o meu site (que por sinal está fora do ar rs)me preocupei em trabalhar no desenvolvimento de uma validação do formulário.
Abraço,
Acho que a validação tem que ser feita dos dois lados, tanto no lado do cliente quanto no servidor…
Um simples estouro de memória no firefox, ou algum engraçadinho usando o Firebug pode, facilmente, burlar a validação no lado cliente… Que vai gerar um chaos se não houver validação no lado do servidor…
Eu só faço no lado do cliente se for um formulário muito grande. No máximo adiciono máscaras. Se for pequeno, só faço no lado do servidor e ponto. O cara fica mais atencioso se ele souber que vai ter que esperar um tempão pra descobrir que algo errado.
Eu faço validação apenas no servidor, mas uso AJAX/JSON para a comunicação. O cliente percebe apenas um pequeno tempo entre o clique e a mensagem de erro/sucesso na tela.. dá a impressão de ser uma validação client-side mas com a segurança server-side. Um exemplo é o meu form de contato que tem o código disponível em http://github.com/luanlmd/luanlmd.com
Não é questão de “eu acho que”. Os formulários tem que ser validados do lado do client e do lado do servidor. Isso é inquestionável.
E se alguém, por exemplo, desabilita javascript?
Eu já consegui “burlar” formulários usando isso.
Pedro,
Acho que depende primeiro do publico alvo e da aplicação, mas não acho necessário que seja feito no cliente e no servidor, uma vez que vai gerar mais códigos e tempo de pelo menos duas pessoas.
Basta fazer uma analise sob o formulário que será validado e decidir se os dados devem vir integros, valide no servidor, se for passível de erro valide no cliente, que além de tudo tem uma desvantagem muito grande … a segurança, se o usuário tiver um pouco de conhecimento conseguira burlar facilmente a validação no cliente
Abraços.
Bom acho q vai depender do que foi acordado com o programador pois se existe um programador no projeto na minha opnião fica claro que TODA a parte de programação fique por conta dele até pq o especialista é ele, agora se o projeto esta sendo feito por um desenvolvedor front-end não vejo problema nenhum em o mesmo implementar o código do form, agora como disse o Pedro a implementação pode não ser feita da forma correta (lado cliente e lado servidor) então se não sabe fazer direito deixe um especialista fazer !
Em ambos os lados, e quando possivel, fazer a postagem via requisição ajax de modo que a validação server site mostre se da mesma forma que como fosse client side, neste caso é feito usando os dois lados não separando um do outro. Há tecnicas que fazem isso funcionar de forma não obstrusiva.
Um exemplo disso é que não dá pra verificar se o e-mail ou usuário já existe na base só com validação client side. A validação somente client side é mais elegante mas não é funcional.
Não existe validação do lado do cliente uma vez que ele pode desabilitar qualquer tentativa de validação existente.
Validação de dados só ocorre do lado do servidor.
A validação deve ser feita sempre dos dois lados.
Tem muito usuário que navega com js desativado e a validação do lado do servidor sempre é mais garantida
Dos 2 e mais alguma coisa que usuári “sacumé né” ?
Normalmente eu costumo apenas validar no front-end mas acho que se a validação fosse feita das 2 formas seria mais eficaz, e evitaria que alguns formulários chegassem em branco né.
De ambos os lados claro!!!!! Porém principalmente do lado do servidor, pois se o Jão desabilitar o javascript só o servidor mesmo pra validar =)
Obrigatoriamente deve ser feita do lado servidor, pois como você vai trabalhar com um dado se você não sabe como ele chegou? Além do javaScript poder ser desabilitado.
Mais vale a pena fazer dos 2 lados tando server-side como client-side. Pois do lado cliente temos a interação, sem a submissão do form, já no lado servidor devemos validar pois se vamos trabalhar com aqueles dados devemos saber exatamente que dados são.
Bom…
A forma segura é fazer pelo server side.
O que deve ser pensado não é o que é melhor “em todos os casos”.
Se o site é pequeno, não vejo nenhum problema em fazê-lo do lado do servidor, mas quando tenho um portal com um grande número de acessos, pensaria em potencializar o client-side, pois se bem feito, resolve!
Rnfim, concordo que o coerente é fazer dos dois lados, mas sempre analisando o caso (servidor, linguagem, tipo de conferência, número de acessos), e não no chute ou em um padrão irracional.
REGRA GERAL, certamente uma validação em ambos os “ends” deve ser feita, mas uma coisa que aprendi em quase 10 anos de web é que existe uma resposta “primária” para desenvolvimento: “depende”.
A validação server side é obrigatória e a validação via js é um instrumentento de usabilidade.
Outra ponto importante é a verificação de dados quando o usuário está logado. Imagine um site de classificados: Vc faz o cadastro, cria um anúncio e quando vai editá-lo vc tem na url “editar_produto.php?id=123″.
Já perdir a conta de quantos sites já vi onde basta mudar o id da url para editar o item de outro usuário… Lembro de um caso onde tinha até a senha do usuário (não criptografada) em um campo hidden…
Concordo também. Levando se em consideração que alguns usuários mais hardcores são muito desconfiados, costumam usar o browser com javascript desabilitado.
Levando-se em consideração esse tipo de coisa, chegamos ao consenso de que nunca é demais ter um certo cuidado na hora de fazer a validação. Tanto o front-end quanto o back-end devem ter isso em mente e fazer a validação em both-side.
Pois é… tem que ser nos dois lados. Se for para escolher um, que seja no servidor. Para mim, é a parte mais chata da programação, pois tenho que pensar como uma anta e imaginar os dados errados que uma anta pode digitar.
No lado cliente, podemos usar o Javascript para criar máscaras e ajudar na validação, mas como foi falado aí, não é tão difícil desabilitar o javascript. Portanto, o ideal é que seja realizada a validação dos dois lados.
A validação deve OBRIGATORIAMENTE ser executada dos dois lados, tanto cliente como servidor. Se for executada apenas de um lado pode causar erros graves e inclusive falhas de segurança.
É OBRIGATÓRIO que o bom desenvolver sempre realize todos os testes possíveis de ambos os lados.
:)
Sem dúvida, a validação precisa ser feita por ambos os lados. Mas a questão levantada seria, de quem é essa responsabilidade? Do programador ou desenvolvedor? Creio que, mesmo que seja front-end, o programador que precisa desenvolver a validação. Deixar o desenvolvedor para realizar esta tarefa seria “perigosa”, pois envolve lógica de programação e regras de negócio. E muitas vezes (por experiência própria), os desenvolvedores front-end pegavam scripts de validações prontos, sem saber a procedência, o que considero um tanto perigoso e poderia causar conflitos de validação.
Concordo com vc, sempre deve ser feita dos dois lados. Ótimo assunto. abraços
Acho que a validação no lado do servidor é obrigatória. Já a validação no lado do cliente é um assunto que depende. Se é pra melhorar a usabilidade do formulário, acho legal ter, se é só pra adicionar frescura, daí não.
O que importa é os dados serem cadastrados, foda-se o resto.
A validação server-side é absolutamente necessária para que tenhamos o mínimo de segurança (sql injection, alguém?) e confiabilidade dos dados. Dados não confiáveis simplesmente não tem valor. Já no client-side depende do nível de usabilidade e sofisticação que você quer alcançar no front-end.
O termo “validação” pode dar mais de um entendimento. Todas as “validações para que o usuário não faça “besteira” deverá ocorrer no front-end. Por exemplo, máscaras/formatação, qtde de caracteres e itens obrigatórios. Já no front-end, você “valida” qtde de caracteres, itens obrigatórios e toda a regra de negócio que você necessita. Sendo assim, você possui a validação em ambos os lados, algumas validações se repetem, outras você faz a mais ou a menos que o outro, de acordo com sua necessidade.
A validação deve ser feita somente no servidor.
É fato considerar que o JavaScript possui comportamento diferente em cada Browser, as vezes na simples mudança de versão do mesmo. Já me ocorreu este fato várias vezes.
O interessante é em algum evento, o valor atribuído a determinado campo (ou campos) sejam enviados para análise no servidor (com o uso de Ajax, por exemplo) antes o formulário inteiro seja enviado. Sendo assim, enquanto o internauta se preocupa em preencher outros campos, se for o caso, o sistema valida os campos preenchidos anteriormente.
A validação sendo apenas no servidor, temos a certeza de o mesmo não causar tantos problemas, mesmo para o programador, principalmente em questões de Debug, o server está OK, mas o JS “da páu” em uma situação específica. Haja tempo para resolver estes Bugs de JS…
Em mudaças futuras no formulário, fica muito mais simples ter alterar em um único lugar, ao invéz de reinventar a roda e fazer “N” testes em browsers distintos para a certeza que o JS está funcionando perto do previsto.
Um ambiente profissional a validação deve ser obrigatoriamente ser feita em ambos os lados!
A validação dever ser feitas dos dois lados.
Na minha opinião, dos dois lados.
Do lado cliente, PODE haver uma validação de interface;
Do lado servidor, DEVE haver validação com os diversos mecanismos disponíveis: triggers no banco de dados, transactions, validações no próprio programa rodando no servidor, etc. O banco de dados sempre PRECISA estar consistente. Não é um luxo, é uma necessidade.
Não se deve esquecer que o Banco de Dados deve ter validação própria, usando triggers e checks. O BD precisa ser independente da aplicação e portanto, mesmo sem a aplicação o mesmo deve manter a consistência dos dados.
Exatamente. Um cenário clássico da necessidade disso são duas aplicações distintas tendo acesso ao mesmo BD.
Claro que deve ser feito nos dois lugares, mas caso não seja possível e tenha que escolher uma, tem que ser no servidor.
Afinal a validação no cliente pode ser entendida como um item de usabilidade. Serve para que o usuário não tenha que enviar o formulário ao servidor e só depois ver o que está correto. Ou seja, com a validação no cliente você antecipa ao usuário os possíveis erros.
Parabéns pelos Blogs, acompanho os dois e os conteúdos são muito bons.
Concordo com você, tem que ser dois 2 lados.
http://twitter.com/jquerybrasil
No servidor. Usando ou não AJAX.
Sem dúvida alguma, tem que ter validação no lado servidor. Se vai ter validação client ou não, isso não importa muito já que não existe um modo de fazer validação client 100% segura.
Até que é legal fazer a validação client por questões de performance já que evita que os dados sejam enviados com erros, mas mesmo assim, sempre haverá um mode de burlar isso.
Já encontrei vários site que somente utilizavam validação com js. Isso é um erro gravíssimo e que dever ser evitado.
Vou detalhar aqui como podemos bular uma validação js.
Uma técnica que alguns usam é, não criar um submit mas sim um buttom para usar na validação js, pois caso não exista suporte a jávascript, o formulário nem sai do lugar.
Com esta “técnica” tem dois graves problemas, o primeiro é a usabilidade, ou seja, temos que informar ao usuário que o navegador dele está com o js desativado, e o outro problema é que podemos, mesmo não tendo o javascript abilitado e nem um sumit, conseguimos enviar o formulário.
Por isso digo: Validação client… talvez, validação server sempre.
abraços
Olá Pedro, concordo plenamente com sua opinião, principalmente pelo fato de já ter passado pelo problema.
Eu penso que a principal validação é do lado do servidor, sendo assim vc nunca vai ter dados inconsistentes. E no lado Front End fica mais apresentavel e bonito para o usuário final. Mas os dois modos são indeispensaveis.
Obrigado por esse blog, ele me ajuda muito.
Abraços
A validação deve ser feita dos dois lados. Crawlers, Spammers e toda aquela galerinha do mal não brincam com o JavaScript ativo. Justamente com o objetivo de tirar vantagem desta falha no desenvolvimento do projeto.
A validação no servidor é obrigatória, é ela que garante a consistência dos dados.
A validação no cliente propicia:
- Melhor usabilidade. O cliente já vê que digitou o cpf errado e corrige.
- Menos requests ao servidor para retornar a mesma página indicando os erros de preenchimento.
- Maior dificuldade de manutenção devido a recursos de JS que passam a quebrar ao longo do tempo.
Claro que do lado do servidor… O lado client não garante integridade dos dados, o lado server-side sim. A validação client pode até ser feita, mas essa é opcional.
Como alguém que grava dados no DB (ou usa de outra maneira..não importa) sem validar eles pode se considerar um programador?
Creio que o melhor é de ambos os lados. Por motivos que vc já falou e foi comentado.
O usuário pode desativar o javascript no navegador. e ai? como fica a validação somente em client-side?
Concordo contigo, Pedro.
Dependendo da importância dos dados inseridos eu faço até validação no próprio banco de dados :P
Abraços!
Concordo que a validação seja feita em ambos os lados, cliente e servido. Levando em consideração que nem sempre temos todo o controle pelo lado cliente, como por exemplo o browser estar com o javascript desabilitado.
O desenvolvedor deve sempre tomar cuidado com os dados que o usuário insere no banco de dados. Dados inválidos ou errados podem em algum momento causar dor de cabeça tanto para o desenvolvedor quanto para quem está administrando o sistema.
eu faco sempre dos dois lados
Para min, lado do servidor é obrigatório, e do cliente é preferencial.
A vantagem de fazer do lado cliente, é poder fazer algo mais simples no lado do servidor, colocando apenas uma mensagem de erro simples, podendo fazer toda validação em um unico
ife do lado cliente mostrar erros mais detalhados.Assim fica bacana :)
Concordo com o Anderson Custódio.
Se a validação for feita com JavaScript ao lado Cliente, fica muito fácil de burlar através de algumas ferramentas simples disponiveis como addons no FF, por exemplo.
Resposta óbvia que só leigo não sabe a resposta.
Não tem opnião nessa dicussão, só fatos!
Flws
“Claro que deve ser feito nos dois lugares, mas caso não seja possível e tenha que escolher uma, tem que ser no servidor.
Afinal a validação no cliente pode ser entendida como um item de usabilidade. Serve para que o usuário não tenha que enviar o formulário ao servidor e só depois ver o que está correto. Ou seja, com a validação no cliente você antecipa ao usuário os possíveis erros.”
É como no banco marcar um campo como NULL ou NOT NULL, tem que barrar o nulo no server-side e no banco também.
No banco é mais importante ainda. Garante a consistência dos dados.
Sim, dos dois lados…
Na verdade eu penso que o cliente deve validar no minimo a estrutura dos dados (isso é, um numero é um numero, uma data é uma data). Depois no lado do servidor validar isso também, e validar negócio.