Filtros (Filter) do PHP
- Página Anterior Exception PHP
- Próxima Página Introdução ao MySQL
Os filtros do PHP são usados para validar e filtrar dados provenientes de fontes não seguras, como entrada do usuário.
O que são filtros do PHP?
Os filtros do PHP são usados para validar e filtrar dados provenientes de fontes não seguras.
Validar e filtrar entradas de usuários ou dados personalizados são parte importante de qualquer aplicativo web.
O objetivo da extensão de filtro do PHP é tornar a filtragem de dados mais fácil e rápida.
Por que usar filtros?
Praticamente todos os aplicativos web dependem de entradas externas. Esses dados geralmente vêm dos usuários ou de outros aplicativos (como serviços web). Ao usar filtros, você pode garantir que o aplicativo receba o tipo correto de entrada.
Você deve sempre filtrar dados externos!
Filtragem de entrada é um dos principais tópicos de segurança de aplicativos.
O que são dados externos?
- Dados de entrada do formulário
- Cookies
- Variáveis do servidor
- Resultados da consulta ao banco de dados
Funções e Filtros
Para filtrar variáveis, use uma das funções de filtro abaixo:
- filter_var() - Filtra uma única variável usando um filtro específico
- filter_var_array() - Filtra múltiplas variáveis usando o mesmo ou diferentes filtros
- filter_input - Obtém uma variável de entrada e a filtra
- filter_input_array - Obtém múltiplas variáveis de entrada e as filtra usando o mesmo ou diferentes filtros
Neste exemplo, usamos a função filter_var() para validar um inteiro:
<?php $int = 123; if(!filter_var($int, FILTER_VALIDATE_INT)) { echo("Integer is not valid"); } else { echo("Integer is valid"); } ?>
O código acima usa o filtro "FILTER_VALIDATE_INT" para filtrar a variável. Como este inteiro é válido, a saída do código é: "Integer is valid".
Se tentarmos usar uma variável não inteira, a saída será: "Integer is not valid".
Para uma lista completa de funções e filtros, acesse nosso Manual do PHP Filter.
Validação e Sanitização
Existem dois tipos de filtros:
Filtros de Validação:
- Usado para validar entradas de usuários
- Regras de formato rigorosas (por exemplo, verificação de URL ou E-Mail)
- Se for bem-sucedido, retorna o tipo esperado, se falhar, retorna FALSE
Filtros de Sanitização:
- Usado para permitir ou proibir caracteres especificados na string
- Sem regras de formato de dados
- Sempre retorna uma string
Opções e sinalizadores
As opções e sinalizadores são usados para adicionar opções de filtragem adicionais para o filtro especificado.
Os diferentes filtros têm opções e sinalizadores diferentes.
Neste exemplo, usamos filter_var() e as opções "min_range" e "max_range" para validar um inteiro:
<?php $var=300; $int_options = array( "options"=>array ( "min_range"=>0, "max_range"=>256 ) ); if(!filter_var($var, FILTER_VALIDATE_INT, $int_options)) { echo("Integer is not valid"); } else { echo("Integer is valid"); } ?>
Como o código acima, as opções devem ser colocadas em um array relacionado chamado "options". Se usar sinalizadores, não é necessário dentro do array.
Como o inteiro é "300", ele não está no intervalo especificado, a saída do código acima será "Integer não é válido".
Para uma lista completa de funções e filtros, acesse o CodeW3C.com fornecido Manual do PHP FilterVocê pode ver todas as opções e sinalizadores disponíveis para cada filtro.
Verificação de entrada
Vamos tentar verificar a entrada vinda do formulário.
A primeira coisa que precisamos fazer é confirmar se existem os dados de entrada que estamos procurando.
Em seguida, usamos a função filter_input() para filtrar os dados de entrada.
No exemplo a seguir, a variável de entrada "email" é transmitida para a página PHP:
<?php if(!filter_has_var(INPUT_GET, "email")) { echo("Tipo de entrada não existe"); } else { if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)) { echo "E-Mail não é válido"; } else { echo "E-Mail é válido"; } } ?>
Explicação do exemplo:
No exemplo acima, há uma variável de entrada (email) transmitida pelo método "GET":
- Verifique se existe a variável de entrada "email" do tipo "GET"
- Se existir a variável de entrada, verifique se é um endereço de e-mail válido
Limpeza de entrada
Vamos tentar limpar a URL传来 do formulário.
Primeiro, devemos confirmar se existem os dados de entrada que estamos procurando.
Em seguida, usamos a função filter_input() para limpar os dados de entrada.
No exemplo a seguir, a variável de entrada "url" é transmitida para a página PHP:
<?php if(!filter_has_var(INPUT_POST, "url")) { echo("Tipo de entrada não existe"); } else { $url = filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL); } ?>
Explicação do exemplo:
No exemplo acima, há uma variável de entrada (url) transmitida pelo método "POST":
- Verifique se existe a variável de entrada "url" do tipo "POST"
- Se existir essa variável de entrada, limpe-a (remova caracteres ilegais) e armazene-a na variável $url
Se a variável de entrada for semelhante a esta: "http://www.W3非o法ol.com.c字符n/", então a variável $url limpa deve ser assim:
http://www.codew3c.com/
Filtrar múltiplas entradas
Os formulários geralmente consistem em vários campos de entrada. Para evitar chamadas repetidas de filter_var ou filter_input, podemos usar filter_var_array ou a função filter_input_array.
Neste exemplo, usamos a função filter_input_array() para filtrar três variáveis GET. As variáveis GET recebidas são um nome, uma idade e um endereço de e-mail:
<?php $filters = array ( "name" => array ( "filter"=>FILTER_SANITIZE_STRING ), "age" => array ( "filter"=>FILTER_VALIDATE_INT, "options"=>array ( "min_range"=>1, "max_range"=>120 ) ), "email"=> FILTER_VALIDATE_EMAIL, ); $result = filter_input_array(INPUT_GET, $filters); if (!$result["age"]) { echo("Age must be a number between 1 and 120.<br />"); } elseif (!$result["email"]) { echo("E-Mail is not valid.<br />"); } else { echo("User input is valid"); } ?>
Explicação do exemplo:
O exemplo acima tem três variáveis de entrada transmitidas pelo método "GET" (name, age e email)
- Definir um array que contenha o nome das variáveis de entrada e os filtros para os variáveis de entrada especificados
- Chamar a função filter_input_array, os parâmetros incluem as variáveis de entrada GET e o array configurado recentemente
- Detectar se as variáveis "age" e "email" no variável $result têm entrada ilegítima. (Se houver entrada ilegítima,)
O segundo parâmetro da função filter_input_array() pode ser um array ou um ID de filtro único.
Se o parâmetro for um ID de filtro único, então esse filtro especificado filtrará todos os valores do array de entrada.
Se o parâmetro for um array, então esse array deve seguir as regras a seguir:
- Deve ser um array associativo, contendo como chaves os variáveis de entrada do array (por exemplo, "age" variável de entrada)
- Os valores deste array devem ser o ID do filtro ou um array que define o filtro, sinalizadores e opções
Uso do Filter Callback
Ao usar o filtro FILTER_CALLBACK, pode chamar uma função personalizada e usá-la como um filtro. Dessa forma, temos controle total sobre o filtro de dados.
Você pode criar suas próprias funções personalizadas ou usar funções PHP existentes.
Defina o método que você deseja usar para funções de filtro da mesma forma que define as opções.
No exemplo a seguir, usamos uma função personalizada para substituir todos os "_" por espaços:
<?php function convertSpace($string) { return str_replace("_", " ", $string); } $string = "Peter_is_a_great_guy!"; echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace")); ?>
O resultado do código acima é o seguinte:
Peter é um grande tipo!
Explicação do exemplo:
O exemplo acima substitui todos os "_" por espaços:
- Crie uma função que substitua "_" por espaço
- Chame a função filter_var(), cujos parâmetros são o filtro FILTER_CALLBACK e um array contendo nossas funções
- Página Anterior Exception PHP
- Próxima Página Introdução ao MySQL