Utilizando PHP para validar dados passados pelo usuário

Este artigo descreve sucintamente o uso das funções Filter do PHP. Estas funções são utilizadas para avaliar e validar dados passados por usuários ou provindos de outras fontes não seguras.

[ Hits: 32.044 ]

Por: EVERTON DA ROSA em 21/02/2008 | Blog: http://everton3x.github.io


Outras funções de filtragem e validação



Na seção anterior, vimos a função filter_var(). Porém existem outras funções que podem ser utilizadas para filtrar e validar variáveis, as quais veremos resumidamente à seguir.

filter_has_var ( int $type , string $variable_name )

Verifica se a variável $variable_name é de determinado tipo (GET, POST, COOKIE, SERVER, ENV), e retorna true ou false.

filter_input_array ( int $type [, mixed $definition ] )

Obtém múltiplas variáveis e opcionalmente, as filtra.

$tipe pode ser INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV, INPUT_SESSION, ou INPUT_REQUEST.

$definition pode ser entendido pelo exemplo abaixo, retirado de http://www.php.net/manual/pt_BR/function.filter-input-array.php:

<?php
error_reporting(E_ALL | E_STRICT);
/* dados recebidos pela página pelo método POST
$_POST = array(
    'product_id'    => 'libgd<script>',
    'component'     => '10',
    'versions'      => '2.0.33',
    'testscalar'    => array('2', '23', '10', '12'),
    'testarray'     => '2',
);
*/


$args = array(//aqui são determinados os filtros que serão apelidados para cada uma das variáveis do POST
    'product_id'   => FILTER_SANITIZE_ENCODED,
    'component'    => array('filter'    => FILTER_VALIDATE_INT,
                            'flags'     => FILTER_REQUIRE_ARRAY,
                            'options'   => array('min_range' => 1, 'max_range' => 10)
                           ),
    'versions'     => FILTER_SANITIZE_ENCODED,
    'doesnotexist' => FILTER_VALIDATE_INT,
    'testscalar'   => array(
                            'filter' => FILTER_VALIDATE_INT,
                            'flags'  => FILTER_REQUIRE_SCALAR,
                           ),
    'testarray'    => array(
                            'filter' => FILTER_VALIDATE_INT,
                            'flags'  => FILTER_REQUIRE_ARRAY,
                           )

);

$myinputs = filter_input_array(INPUT_POST, $args);//aqui se aplicam os filtros na variável $_POST

var_dump($myinputs);
echo "\n";
?>

Parece complicado, mas se você estudar os filtros utilizados, facilmente irá compreender o código e poderá compor rotinas de validação e filtragem muito simples e muito poderosas para suas páginas.

O exemplo acima deverá imprimir algo próximo disto:

array(6) {
  ["product_id"]=>
  array(1) {
    [0]=>
    string(17) "libgd%3Cscript%3E"
  }
  ["component"]=>
  array(1) {
    [0]=>
    int(10)
  }
  ["versions"]=>
  array(1) {
    [0]=>
    string(6) "2.0.33"
  }
  ["doesnotexist"]=>
  NULL
  ["testscalar"]=>
  bool(false)
  ["testarray"]=>
  array(1) {
    [0]=>
    int(2)
  }
} filter_input ( int $type , string $variable_name [, int $filter [, mixed $options ]] )

A função acima obtém uma variável e a filtra opcionalmente. Veja o exemplo abaixo:

<?php
$search_html = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_SPECIAL_CHARS);//pega a variável $_GET, aplica FILTER_SANITIZE_ENCODED em $_GET['search']
$search_url = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_ENCODED);
echo "Você procurou por $search_html.\n";
echo "<a href='?search=$search_url'>Procure novamente.</a>";
?>

O código retornado ao navegador é o seguinte:

Você procurou por Me & son.
<a href='?search=Me%20%26%20son'>Procure novamente.</a>

filter_var_array ( array $data [, mixed $definition ] )

Esta função obtém várias variáveis e as filtra, opcionalmente. Muito parecida com a função filter_input_array(), diferenciando-se da mesma pelo fato de que $data pode ser um array definido no código, como no exemplo abaixo:

<?php
error_reporting(E_ALL | E_STRICT);
$data = array(//repare que para filter_input_array(), os dados a serem filtrados foram recebidos via POST
    'product_id'    => 'libgd<script>',
    'component'     => '10',
    'versions'      => '2.0.33',
    'testscalar'    => array('2', '23', '10', '12'),
    'testarray'     => '2',
);

$args = array(
    'product_id'   => FILTER_SANITIZE_ENCODED,
    'component'    => array('filter'    => FILTER_VALIDATE_INT,
                            'flags'     => FILTER_FORCE_ARRAY,
                            'options'   => array('min_range' => 1, 'max_range' => 10)
                           ),
    'versions'     => FILTER_SANITIZE_ENCODED,
    'doesnotexist' => FILTER_VALIDATE_INT,
    'testscalar'   => array(
                            'filter' => FILTER_VALIDATE_INT,
                            'flags'  => FILTER_REQUIRE_SCALAR,
                           ),
    'testarray'    => array(
                            'filter' => FILTER_VALIDATE_INT,
                            'flags'  => FILTER_FORCE_ARRAY,
                           )

);

$myinputs = filter_var_array($data, $args);

var_dump($myinputs);
echo "\n";
?>

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Validando e filtrando strings
   3. Outras funções de filtragem e validação
   4. Considerações finais
Outros artigos deste autor

Relatórios com PHP e XSLT - Conceitos iniciais e utilização básica

PHP5 Orientado a Objetos: Visibilidade, herança e extensões de classes

Considerações sobre as distribuições

ExtJS: Um excelente framework de JavaScript

SliTaz: Mini-review desta mini-distribuição Linux

Leitura recomendada

Cadastro e login em PHP

Criando um sistema de banners rotativos em PHP

Formantando nomes com caracteres especiais em PHP

Referências ou ponteiros em PHP

Google Chart: Criando gráficos dinâmicos em minutos

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts