Artigo .net Magazine 64 - Validation Application Block - Parte 1
Artigo da Revista .NET Magazine - Edição 64.
Boas Práticas
Validation Application Block
Boas Práticas na construção de validações – Parte 1
Do que trata o artigo
Boas práticas, encapsulamento das validações de um determinado objeto.
Para que serve
Validação de objetos de forma a permitir reusabilidade entre componentes de uma aplicação e também suporte para validar entrada de informações em variados tipos de front-end.
Em que situação o tema é útil
Aplicações que necessitem validar objetos através de suas camadas mantendo um ponto único para configuração das regras de validação através de técnicas simples e de fácil manutenção.
Resumo do DevMan
Este artigo, dividido em duas partes, apresentará o Validation Application Block, disponibilizado juntamente com a Enterprise Library e exemplos para criação de validações a partir das opções básicas do bloco ou estendendo suas classes para desenvolver validações mais complexas, veremos também as facilidades que este bloco oferece para tratar o input através de várias opções de front-end.
Desenvolver aplicações confiáveis e seguras requer um considerável esforço, sob o ponto de vista do usuário, esses requisitos são indispensáveis e na maioria dos casos determinantes para a utilização de uma aplicação. Entende-se por “confiável” a capacidade de um software realizar e manter seu funcionamento em circunstâncias de rotina, incluindo circunstâncias hostis e inesperadas, sendo assim, na medida em que aumentamos a confiabilidade de uma aplicação reduzimos a superfície de ataques e vulnerabilidades de segurança.
Grande parte das aplicações desenvolvidas tem por objetivo final armazenar informações relacionadas a um determinado negócio para posterior consulta. Não é difícil compreendermos rapidamente que uma informação armazenada de maneira distorcida ou imprópria para negócio constitui um grande problema. Um conjunto de regras de validação para a entrada e transporte de dados se faz necessário para garantirmos a consistência do armazenamento final, contudo a manutenção dessas regras de validação pode gerar uma sobrecarga de esforço além de abrir a possibilidade de discrepâncias entre as diversas camadas que o dado precisa percorrer do front-end até o banco de dados.
Felizmente, conciliar os aspectos de confiabilidade e segurança na entrada de dados de uma aplicação com facilidade de desenvolvimento e manutenção é um problema resolvido por alguns frameworks e bibliotecas disponíveis no mercado, que, aliado a boas práticas de codificação, destacam os bons softwares dos ruins.
Problemas intrínsecos ao input de dados das aplicações
Veremos a seguir alguns riscos inerentes à entrada de dados das aplicações bem como seu contexto:
·Injeção de código – Falando sobre segurança, quando uma aplicação permite que um usuário mal intencionado utilize técnicas (como injeção de código SQL, por exemplo) para realizar operações indevidas, as informações são expostas a danos muitas vezes irreversíveis ou de difícil reparação. A entrada de dados com validações eficazes seja por formulários Web, aplicações Windows Forms, Web Services, WCF, entre outros, é a primeira barreira contra distorções das informações ou ataques maliciosos;
·HTML Embedding – Este tipo de técnica de ataque consiste em informar tags de HTML nos inputs de formulários Web para que haja o acréscimo de informações no momento do browser renderizar uma página, podendo expor alguma falha de segurança;
·Distorção da informação – Imagine se um sistema Web que faz a inscrição de atletas da terceira idade para uma corrida permite que um adolescente de 14 anos consiga finalizar um cadastro sem que seja aplicada alguma regra para verificação de sua faixa etária. Bem, basta criar essas validações no formulário Web, certo? E se esse cadastro também estiver disponível através de uma aplicação Windows Forms num quiosque de um shopping ou ainda por um Web Services cujo front-end que o acessará será desenvolvido por terceiros? Replicamos as regras de validação? Colocamos tudo nos componentes de negócio permitindo que algumas camadas internas da aplicação recebam injeção de código?
·
Combinar um conjunto de boas práticas com uma biblioteca de validação eficaz e extensível com suporte a diversos tipos de front-end é o objetivo do Validation Application Block, como veremos a seguir.
Apresentando o Validation Application Block
Disponibilizado a partir da versão 3.0 da Enterprise Library, em abril de 2007, o Validation Application Block oferece mecanismos para encapsulamento de validações de objetos e suporte para diversos tipos de front-end, através de facilidades como:
·Definição das validações através de atributos nos membros de uma classe ou em arquivos de configuração semelhante aos demais blocos da Enterprise Library;
·Conjunto de validações predefinidas para situações comuns, tais como: verificação de preenchimento de campo, tipo de dado, conjunto de valores possíveis, uso de regular expression entre outros;
·Composição de validadores criando validações complexas, inclusive com associações entre membros de uma classe;
·Organização das validações em grupos, permitindo acionamento de um conjunto de regras específico quando necessário;
·Suporte nativo para integração com ASP.NET, Windows Forms e WCF;
As validações predefinidas disponibilizadas cobrem os itens descritos na Tabela 1.
Elemento |
Descrição |
Not Null Validator |
Esse validador checa se o valor é diferente de nulo, usado quando queremos garantir a passagem de algum valor obrigatoriamente. |
Contains Characters Validator |
Valida se uma string contém determinados caracteres. |
Date Time Range Validator |
Verifica se uma data está contida em uma faixa predeterminada de variação. |
Domain Validator |
Valida a entrada contra um conjunto de valores possíveis predeterminados. |
Enum Conversion Validator |
Deve ser usado quando desejamos checar se um valor pode ser convertido para algum tipo de uma enumeração. |
Object Collection Validator |
Esse validador verifica se um objeto possui algum atributo definido por outro objeto com suas validações próprias e invoca a validação de cada elemento da cadeia de relacionamento. |
Property Comparison Validator |
Compara o valor a ser checado com o valor de uma propriedade do objeto. |
Range Validator |
Verifica se o valor está dentro de uma faixa predeterminada. |
Regular Expression Validator |
Checa se o valor corresponde ao padrão definido por uma regular expression. |
Relative Date Time Validator |
Realiza uma checagem sobre uma data para verificar se ela atende os critérios predefinidos. |
String Length Validator |
Esse validador verifica se uma string possui um tamanho mínimo e/ou máximo predefinido. |
Type Conversion Validator |
Checa se uma string pode ser convertida para um tipo específico. |
And Composite Validator |
Cria uma composição entre validadores de forma que todos devem ser verdadeiros, pode ser usado quando é necessário utilizar validações mais sofisticadas. |
Or Composite Validator |
Cria uma composição entre validadores de forma que se um deles for verdadeiro toda a composição será verdadeira. |
Tabela 1. Validadores padrão disponíveis no Validation Application Block
Neste artigo utilizei a versão 4.1 da Enterprise Library, de outubro de 2008, disponível no link http://msdn.microsoft.com/entlib por ser a versão mais atualizada até então.
Nota do DevMan
As “expressões regulares” (regular expressions, ou apenas regex) fornecem um meio conciso e flexível para identificação de cadeias de caracteres em um dado texto,
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo