W3docs

Filtros PHP Avançados: Um Guia Completo

Aprenda a usar filtros avançados do PHP para validar e sanitizar dados de entrada com flags, callbacks e filtragem em lote.

Filtrar entradas é um dos hábitos de segurança mais importantes no PHP: todo valor que chega de fora do seu código — campos de formulários, query strings, cookies, payloads de API — deve ser tratado como não confiável até que tenha sido validado ou limpo. O PHP inclui uma extensão de filtros nativa que faz exatamente isso, então raramente é necessário escrever expressões regulares manualmente para verificações comuns. Este capítulo vai além do básico e aborda flags de filtros, callbacks, filtragem em lote, valores padrão e as armadilhas que pegam as pessoas de surpresa em produção.

Se você não conhece a extensão de filtros, comece com o capítulo introdutório PHP Filters e depois volte aqui.

Entendendo os Filtros PHP

Um filtro é uma regra nomeada que o PHP aplica a um valor por meio da função filter_var() (e suas variantes). Há dois trabalhos que um filtro pode realizar:

  • Validar — verificar se um valor corresponde a um formato e retornar o valor em caso de sucesso ou false em caso de falha. O valor não é alterado.
  • Sanitizartransformar um valor removendo ou codificando caracteres indesejados e retornar a string limpa.

Saber qual tarefa você precisa é importante: validação rejeita dados inválidos, sanitização os reescreve. Para formulários voltados ao usuário, geralmente você valida primeiro (rejeita) e sanitiza apenas quando precisa aceitar e limpar um valor (por exemplo, escapar HTML antes da exibição).

Tipos de Filtros

O PHP oferece vários tipos de filtros que podem ser usados para diferentes finalidades. Alguns dos filtros mais usados incluem:

  • Filtros de validação: São usados para validar dados, como verificar se uma string é um endereço de e-mail válido ou se um número está dentro de um determinado intervalo.
  • Filtros de sanitização: São usados para sanitizar dados, como remover caracteres prejudiciais de uma string ou converter caracteres especiais em entidades HTML.
  • Filtros personalizados: Permitem definir suas próprias funções de filtro para necessidades específicas.

Alguns filtros cobrem a grande maioria das necessidades do mundo real:

FiltroFunçãoExemplo de uso
FILTER_VALIDATE_EMAILValidarVerificar um endereço de e-mail
FILTER_VALIDATE_INTValidarVerificar um inteiro, opcionalmente dentro de um intervalo
FILTER_VALIDATE_FLOATValidarVerificar um número de ponto flutuante
FILTER_VALIDATE_URLValidarVerificar uma URL
FILTER_VALIDATE_IPValidarVerificar um endereço IPv4/IPv6
FILTER_SANITIZE_FULL_SPECIAL_CHARSSanitizarCodificar caracteres especiais HTML
FILTER_SANITIZE_NUMBER_INTSanitizarRemover tudo exceto dígitos e +/-
FILTER_SANITIZE_EMAILSanitizarRemover caracteres ilegais em um e-mail

Você pode listar todos os filtros suportados pela sua build com filter_list().

Usando Filtros PHP

A sintaxe básica para aplicar um filtro é:

Sintaxe da função filter_var do PHP

filter_var($variable, $filter, $options);

Onde $variable é o valor que você deseja filtrar, $filter é uma constante de filtro como FILTER_VALIDATE_EMAIL, e o argumento opcional $options carrega flags ou opções por filtro.

filter_var($variable, FILTER_VALIDATE_EMAIL);

Aqui filter_var() verifica se o valor armazenado em $variable é um endereço de e-mail válido, retornando o e-mail em caso de sucesso ou false em caso de falha.

Também existem funções dedicadas para ler entradas externas diretamente — filter_input() para um único valor e filter_input_array() para vários — que leem de INPUT_GET, INPUT_POST, INPUT_COOKIE e assim por diante. Use estas em vez de acessar $_GET/$_POST diretamente, pois elas leem os dados originais da requisição mesmo que uma superglobal tenha sido modificada.

Opções Avançadas de Filtros PHP

Os filtros PHP também possuem várias opções avançadas que podem ser usadas para personalizar o comportamento. Algumas das opções mais usadas incluem:

  • Opções de flags: Modificam o comportamento do filtro, como exigir um tipo de dado específico ou permitir múltiplos valores. Por exemplo, FILTER_FLAG_EMAIL_UNICODE permite caracteres internacionais na validação de e-mail.
  • Funções de callback: Permitem passar uma função personalizada para FILTER_CALLBACK para lógica de validação ou sanitização personalizada.
  • Filtragem de arrays: Use filter_var_array() ou filter_input_array() para aplicar filtros a múltiplas variáveis de uma vez, o que é especialmente útil para processar dados de formulários ou query strings.

Exemplos de Filtros PHP

Aqui estão alguns exemplos de como os filtros PHP podem ser usados em situações do mundo real:

PHP validar um e-mail usando filter_var

php— editable, runs on the server

Neste exemplo, a função filter_var é usada para validar um endereço de e-mail. Se o endereço de e-mail for válido, o script exibirá "Email is valid"; caso contrário, exibirá "Email is not valid".

PHP sanitizar string usando filter_var

php— editable, runs on the server

Neste exemplo, a função filter_var é usada para sanitizar uma string. O filtro FILTER_SANITIZE_FULL_SPECIAL_CHARS é usado para remover ou codificar tags HTML e caracteres especiais da string, resultando em uma string segura e limpa que pode ser usada na sua aplicação.

Exemplos Avançados de Filtros PHP

Para aproveitar todo o poder dos filtros PHP, você pode usar callbacks e filtragem de arrays:

PHP filtro com callback

<?php

function custom_sanitize($str) {
    return strtoupper(trim($str));
}

$input = "  hello world  ";
$result = filter_var($input, FILTER_CALLBACK, ["options" => "custom_sanitize"]);

echo $result; // Outputs: HELLO WORLD
?>

PHP filtrar array de variáveis

<?php

$data = [
    "email" => "[email protected]",
    "age" => "25",
    "url" => "https://example.com"
];

$filters = [
    "email" => FILTER_VALIDATE_EMAIL,
    "age" => ["filter" => FILTER_VALIDATE_INT, "options" => ["min_range" => 1, "max_range" => 120]],
    "url" => FILTER_VALIDATE_URL
];

$result = filter_var_array($data, $filters);

print_r($result);
?>

A saída é:

Array
(
    [email] => [email protected]
    [age] => 25
    [url] => https://example.com
)

Se algum valor falhar no filtro, aquela chave conterá false em vez do valor, então você pode identificar exatamente qual campo era inválido.

Validar um inteiro dentro de um intervalo

As opções min_range e max_range fazem com que FILTER_VALIDATE_INT rejeite números fora dos limites — útil para coisas como uma quantidade ou uma idade:

<?php

$age = "150";
$options = ["options" => ["min_range" => 1, "max_range" => 120]];

var_dump(filter_var($age, FILTER_VALIDATE_INT, $options)); // bool(false)
?>

Como 150 está acima de max_range, o filtro retorna false mesmo que "150" seja uma string de inteiro perfeitamente válida.

Fornecer um valor padrão quando a validação falha

A maioria dos filtros de validação aceita uma opção default, para que você possa retornar a um valor seguro em vez de false:

<?php

$price = filter_var("not-a-number", FILTER_VALIDATE_FLOAT, [
    "options" => ["default" => 0.0]
]);

var_dump($price); // float(0)
?>

Armadilhas Comuns

Alguns comportamentos surpreendem os iniciantes:

  • false é um valor válido. Quando um valor é legitimamente 0 ou "0", uma verificação ingênua com if (filter_var(...)) trata isso como falha. Compare com false explicitamente usando o operador estrito: if (filter_var($n, FILTER_VALIDATE_INT) === false).
  • A validação não altera o valor. FILTER_VALIDATE_* retorna seu valor original (com cast quando apropriado) ou false; nunca sanitiza. Se precisar de uma string limpa, use um filtro FILTER_SANITIZE_*.
  • A validação de e-mail não verifica a entrega. FILTER_VALIDATE_EMAIL verifica apenas a sintaxe — não pode confirmar se a caixa de entrada existe. Adicione FILTER_FLAG_EMAIL_UNICODE se aceitar endereços internacionalizados.
  • Sanitizar não é o mesmo que escapar para SQL. Use prepared statements (ou mysqli_real_escape_string()) para consultas de banco de dados; filtros são para limpeza de formato, não segurança em queries.

Conclusão

Em conclusão, os filtros PHP são uma ferramenta essencial para desenvolvedores web que desejam validar e sanitizar dados de entrada. Com os diversos tipos e opções disponíveis, você pode facilmente adaptar seus filtros às necessidades específicas da sua aplicação. Seja para validar e-mails, remover caracteres prejudiciais ou realizar validações personalizadas, os filtros PHP têm tudo o que você precisa.

Não se esqueça de combinar filtros com outras medidas de segurança — prepared statements, escape de saída e proteção CSRF — para manter sua aplicação web o mais segura possível. Para um guia completo, consulte PHP Form Validation.

Prática

Prática
Quais dos seguintes filtros são usados no PHP?
Quais dos seguintes filtros são usados no PHP?
Was this page helpful?