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: 30.181 ]

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

Considerações sobre as distribuições

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

Qual o valor de seu trabalho

ExtJS: Um excelente framework de JavaScript

Funções da categoria Miscelânea do PHP

Leitura recomendada

Turck MMcache completo e sem mistérios

Tags automáticas em URLs com a classe urlmatch da PHP

Inteligência Artificial com PHP e MySQL (parte I)

Criando Virtual Host no Apache: simples assim

Cadastro e login em PHP

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts