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

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

Tratamento de exceções do PHP: uma introdução para iniciantes

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

SLiM: Simple Login Manager - Mini review

Utilizando endereços personalizados no seu servidor web: passo-a-passo

Qual o valor de seu trabalho

Leitura recomendada

Cadastro e login em PHP

Instalando Lamp Stack no Servidor Debian

Formantando nomes com caracteres especiais em PHP

Usando cache na classe Fast Template

Criando um sistema de banners rotativos em PHP

  
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