Olá! Pessoal!
Vou falar de um técnica para acessar, validar e filtrar dados das variáveis$_POST e $_GET no PHP.
Caminhando na minha jornada rumo a Certificação PHP, me deparei com um artigo na PHP Architect, que exemplificava a utilização das funções filter_input efilter_input_array. Tais funções foram inseridas no PHP a partir da versão 5.2 e são uma ótima forma para tratar dados das variáveis $_GET e $_POST deixando seucódigo mais legível e seguro.
Como é falado no artigo original, é incrível a quantidade de sites/sistemas em PHP com falhas de segurança por não tratar a entrada de dados pelo usuário. Existe também o tempo gasto para escrever códigos de tratamento dos dados de entrada.
Veja como seu código fica mais limpo e claro utilizando a função filter_input para tratar um parâmetro via GET:
<?php
$user_name = filter_input(INPUT_GET, 'user_name', FILTER_SANATIZE_STRING);
?>
Na página de documentação do PHP, também existe um exemplo utilizando a função filter_input_array,
onde é criado um array com as opções de validação do POSTesperado pelo programa.
<?php
error_reporting(E_ALL | E_STRICT);
/* data actually came from POST
$_POST = array(
'product_id' => 'libgd<script>',
'component' => '10',
'versions' => '2.0.33',
'testscalar' => array('2', '23', '10', '12'),
'testarray' => '2',
);
*/
/**
* Arry com as opções de validação
*/
$args = array(
'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);
var_dump($myinputs);
?>
O resultado deste tratamento seria:
array
‘product_id’ => string ‘libgd%3Cscript%3E’(length=17)
‘component’ => boolean false
‘versions’ => string ’2.0.33′ (length=6)
‘doesnotexist’ => null
‘testscalar’ => boolean false
‘testarray’ => boolean false
Existem vários tipos de filtros que podem ser utilizados, sendo eles divididos em “dois grupos”, SANATIZE eVALIDATE. Os filtros dos tipo SANATIZE limpam os dados da variável, já os filtros do tipo VALIDATE, retornam FALSE caso o dados não passe pelo filtro.
As funções filter_input e filter_input_array não tratam todos os tipos de dados e nem vão deixar seu programa 100% seguro, mas já é uma boa parte da segurançarealizada de forma elegante.


