Artigos Validações no MVC 4 com Data Annotations
Este artigo trata de Data Annotations, uma forma de adicionar validações às classes do ASP.NET, que foi introduzida no .NET 3.5. Será explicado como utilizar os atributos para especificar a validação que queremos aplicar em cada propriedade, como verificar se um campo está vazio ou se ele apenas possui números. Este tema é útil quando se necessita garantir a segurança ao trabalhar com os dados, não permitindo que o usuário envie dados inconsistentes, seja por falta de atenção ou até por atitudes maliciosas.
Com o crescimento e popularização da internet, a cada dia o usuário se torna menos leigo e mais exigente. E quando se fala em exigência, dois dos principais pontos que merecem atenção em relação à Web são a velocidade/desempenho das aplicações e a segurança dos dados manipulados por elas.
Obviamente, a grande maioria dos usuários dá preferência a sites já conhecidos e, portanto, sites seguros na visão deles. Porém, ao mesmo tempo em que busca um ambiente seguro para navegar, o usuário não deixa de lado o quesito velocidade. Se para garantir a segurança for necessário um tempo consideravelmente grande de processamento, o usuário possivelmente deixará de lado o site, principalmente aqueles que não possuem conhecimento a respeito do assunto.
Sendo assim, não basta só pensarmos em manter o site seguro, mas também temos que mantê-lo rápido. Portanto, dentre outras questões, temos de projetar melhor as nossas validações para que, enquanto prezam pela integridade das informações tratadas, não firam o outro propósito de manter o site veloz.
Grande parte dos sistemas, por mais simples que sejam, necessitam de algum modo executar diversos tipos de validações para impedir que o usuário insira dados incorretos, seja por falta de atenção, ou até por atitudes maliciosas, com o objetivo de levar alguma vantagem em relação ao software, conseguindo dados sigilosos (como na Injeção de SQL - BOX 1), informando valores fora dos limites aceitáveis, ao apenas deixando um campo em branco.
BOX 1. Injeção de SQL
Comumente referenciado pelo termo em inglês SQL Injection, este é um tipo de ataque à segurança de aplicações que consiste em inserir instruções SQL em campos que são utilizados para realizar operações com o banco de dados, tais como filtros, atualizações e inserções. Uma das formas mais comuns de injeção de SQL é realizada em formulários de login que realizam um filtro na base de dados com SQL, passando diretamente o valor dos campos expostos na tela. Ao inserir uma instrução maliciosa em nos campos de login e/ou senha, é possível, por exemplo, acessar o sistema sem possuir credenciais ou excluir tabelas inteiras do banco com um comando drop table.
Devemos tentar prever os possíveis erros e nos preparar para tratá-los de maneira adequada, impedindo a entrada dos dados não desejados e orientando o usuário a tomar a ação correta ao submeter os dados no formulário.
Existem algumas formas de prevenir os erros, usando máscaras para delimitar o formato do campo, ou labels indicando o que o campo espera. Ainda que esta segunda opção não restrinja a inserção de valores no formato esperado, ela é importante para manter o usuário informado sobre o tipo de informação que está sendo requisitado em determinado campo, evitando a ocorrência de erros não intencionais.
Existem alguns campos que geralmente não são validados, por não serem considerados de preenchimento obrigatório, ou por não serem utilizados com frequência. Esses campos podem se mostrar uma brecha na segurança do site, portanto, a eles precisa ser dada a devida atenção no momento de planejar a sua validação. Um bom exemplo são campos de observação, que a princípio são não são obrigatórios e frequentemente não é feito nenhum tipo de verificação neles, abrindo espaço para que sejam utilizados, por exemplo, para ataques XSS, injetando scripts na sua aplicação e prejudicando-a.
Por isso devemos planejar bem os tipos de informações que serão expostas antes de iniciar a validação. Por exemplo, é importante que campos numéricos sejam delimitados, evitando tanto a quebra de regras de negócio quanto à ultrapassagem dos limites aceitos pela base de dados. Em alguns campos de texto os caracteres especiais também devem ser negados, evitando a inserção de dados maliciosos e informações inconsistentes para o fim a que se destinam.
Normalmente, essas validações são definidas como client-side e server-side, onde client-side são validações do lado do clie ...